forked from OSchip/llvm-project
Remove implicit constructor and operator int from PowerOf2.
This patch is to make instantiation and conversion to an integer explicit, so that we can mechanically replace all occurrences of the class with integer in the next step. Now get() returns an alignment value rather than its log2 value. llvm-svn: 233242
This commit is contained in:
parent
2c6e0597c6
commit
c3d18f5120
|
@ -30,8 +30,9 @@ class Reference;
|
|||
// Once the conversion is done, this class will be removed.
|
||||
class PowerOf2 {
|
||||
public:
|
||||
PowerOf2(uint16_t v) : _v(v) {}
|
||||
operator uint16_t() const { return _v; }
|
||||
explicit PowerOf2(uint16_t v) : _v(v) {}
|
||||
bool operator==(const PowerOf2 &other) const { return _v == other._v; }
|
||||
uint16_t get() const { return 1 << _v; }
|
||||
private:
|
||||
uint16_t _v;
|
||||
};
|
||||
|
@ -218,12 +219,13 @@ public:
|
|||
|
||||
struct Alignment {
|
||||
Alignment(int p2, int m = 0) : powerOf2(p2), modulus(m) {}
|
||||
Alignment(PowerOf2 p2, int m = 0) : powerOf2(p2), modulus(m) {}
|
||||
|
||||
PowerOf2 powerOf2;
|
||||
uint16_t modulus;
|
||||
|
||||
bool operator==(const Alignment &rhs) const {
|
||||
return (powerOf2 == rhs.powerOf2) && (modulus == rhs.modulus);
|
||||
return (powerOf2.get() == rhs.powerOf2.get()) && (modulus == rhs.modulus);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -312,7 +312,7 @@ private:
|
|||
struct SectionAlign {
|
||||
StringRef segmentName;
|
||||
StringRef sectionName;
|
||||
uint8_t align2;
|
||||
PowerOf2 align2;
|
||||
};
|
||||
|
||||
struct OrderFileNode {
|
||||
|
|
|
@ -479,13 +479,13 @@ bool DarwinLdDriver::parse(int argc, const char *argv[],
|
|||
<< alignStr << "' not a valid number\n";
|
||||
return false;
|
||||
}
|
||||
PowerOf2 align2 = llvm::countTrailingZeros(alignValue);
|
||||
PowerOf2 align2(llvm::countTrailingZeros(alignValue));
|
||||
if (!llvm::isPowerOf2_64(alignValue)) {
|
||||
diagnostics << "warning: alignment for '-sectalign "
|
||||
<< segName << " " << sectName
|
||||
<< llvm::format(" 0x%llX", alignValue)
|
||||
<< "' is not a power of two, using "
|
||||
<< llvm::format("0x%08X", (1 << align2)) << "\n";
|
||||
<< llvm::format("0x%08X", align2.get()) << "\n";
|
||||
}
|
||||
ctx.addSectionAlignment(segName, sectName, align2);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
const lld::AtomLayout *appendAtom(const Atom *atom) {
|
||||
const DefinedAtom *definedAtom = cast<DefinedAtom>(atom);
|
||||
DefinedAtom::Alignment atomAlign = definedAtom->alignment();
|
||||
uint64_t alignment = 1u << atomAlign.powerOf2;
|
||||
uint64_t alignment = atomAlign.powerOf2.get();
|
||||
this->_atoms.push_back(new (this->_alloc) lld::AtomLayout(atom, 0, 0));
|
||||
// Set the section alignment to the largest alignment
|
||||
// std::max doesn't support uint64_t
|
||||
|
@ -57,8 +57,8 @@ void SDataSection<HexagonELFType>::doPreFlight() {
|
|||
const lld::AtomLayout * B) {
|
||||
const DefinedAtom *definedAtomA = cast<DefinedAtom>(A->_atom);
|
||||
const DefinedAtom *definedAtomB = cast<DefinedAtom>(B->_atom);
|
||||
int64_t alignmentA = 1 << definedAtomA->alignment().powerOf2;
|
||||
int64_t alignmentB = 1 << definedAtomB->alignment().powerOf2;
|
||||
int64_t alignmentA = definedAtomA->alignment().powerOf2.get();
|
||||
int64_t alignmentB = definedAtomB->alignment().powerOf2.get();
|
||||
if (alignmentA == alignmentB) {
|
||||
if (definedAtomA->merge() == DefinedAtom::mergeAsTentative)
|
||||
return false;
|
||||
|
|
|
@ -310,7 +310,7 @@ template <class ELFT>
|
|||
uint64_t AtomSection<ELFT>::alignOffset(uint64_t offset,
|
||||
DefinedAtom::Alignment &atomAlign) {
|
||||
uint64_t requiredModulus = atomAlign.modulus;
|
||||
uint64_t alignment = 1u << atomAlign.powerOf2;
|
||||
uint64_t alignment = atomAlign.powerOf2.get();
|
||||
uint64_t currentModulus = (offset % alignment);
|
||||
uint64_t retOffset = offset;
|
||||
if (currentModulus != requiredModulus) {
|
||||
|
@ -330,7 +330,7 @@ const lld::AtomLayout *AtomSection<ELFT>::appendAtom(const Atom *atom) {
|
|||
const DefinedAtom *definedAtom = cast<DefinedAtom>(atom);
|
||||
|
||||
DefinedAtom::Alignment atomAlign = definedAtom->alignment();
|
||||
uint64_t alignment = 1u << atomAlign.powerOf2;
|
||||
uint64_t alignment = atomAlign.powerOf2.get();
|
||||
// Align the atom to the required modulus/ align the file offset and the
|
||||
// memory offset separately this is required so that BSS symbols are handled
|
||||
// properly as the BSS symbols only occupy memory size and not file size
|
||||
|
|
|
@ -44,7 +44,7 @@ public:
|
|||
}
|
||||
DefinedAtom::Alignment align(
|
||||
inSection->alignment,
|
||||
sectionOffset % ((uint64_t)1 << inSection->alignment));
|
||||
sectionOffset % inSection->alignment.get());
|
||||
MachODefinedAtom *atom =
|
||||
new (allocator()) MachODefinedAtom(*this, name, scope, type, merge,
|
||||
thumb, noDeadStrip, content, align);
|
||||
|
@ -67,7 +67,7 @@ public:
|
|||
}
|
||||
DefinedAtom::Alignment align(
|
||||
inSection->alignment,
|
||||
sectionOffset % ((uint64_t)1 << inSection->alignment));
|
||||
sectionOffset % inSection->alignment.get());
|
||||
MachODefinedCustomSectionAtom *atom =
|
||||
new (allocator()) MachODefinedCustomSectionAtom(*this, name, scope, type,
|
||||
merge, thumb,
|
||||
|
@ -86,7 +86,7 @@ public:
|
|||
}
|
||||
DefinedAtom::Alignment align(
|
||||
inSection->alignment,
|
||||
sectionOffset % ((uint64_t)1 << inSection->alignment));
|
||||
sectionOffset % inSection->alignment.get());
|
||||
MachODefinedAtom *atom =
|
||||
new (allocator()) MachODefinedAtom(*this, name, scope, size, noDeadStrip,
|
||||
align);
|
||||
|
|
|
@ -732,10 +732,7 @@ ArchHandler &MachOLinkingContext::archHandler() const {
|
|||
|
||||
void MachOLinkingContext::addSectionAlignment(StringRef seg, StringRef sect,
|
||||
PowerOf2 align2) {
|
||||
SectionAlign entry;
|
||||
entry.segmentName = seg;
|
||||
entry.sectionName = sect;
|
||||
entry.align2 = align2;
|
||||
SectionAlign entry = { seg, sect, align2 };
|
||||
_sectAligns.push_back(entry);
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ struct Section {
|
|||
StringRef sectionName;
|
||||
SectionType type;
|
||||
SectionAttr attributes;
|
||||
uint32_t alignment;
|
||||
PowerOf2 alignment;
|
||||
Hex64 address;
|
||||
ArrayRef<uint8_t> content;
|
||||
Relocations relocations;
|
||||
|
|
|
@ -297,7 +297,7 @@ readBinary(std::unique_ptr<MemoryBuffer> &mb,
|
|||
section.type = (SectionType)(read32(§->flags, isBig) &
|
||||
SECTION_TYPE);
|
||||
section.attributes = read32(§->flags, isBig) & SECTION_ATTRIBUTES;
|
||||
section.alignment = read32(§->align, isBig);
|
||||
section.alignment = PowerOf2(read32(§->align, isBig));
|
||||
section.address = read64(§->addr, isBig);
|
||||
const uint8_t *content =
|
||||
(const uint8_t *)start + read32(§->offset, isBig);
|
||||
|
@ -341,7 +341,7 @@ readBinary(std::unique_ptr<MemoryBuffer> &mb,
|
|||
SECTION_TYPE);
|
||||
section.attributes =
|
||||
read32((const uint8_t *)§->flags, isBig) & SECTION_ATTRIBUTES;
|
||||
section.alignment = read32(§->align, isBig);
|
||||
section.alignment = PowerOf2(read32(§->align, isBig));
|
||||
section.address = read32(§->addr, isBig);
|
||||
const uint8_t *content =
|
||||
(const uint8_t *)start + read32(§->offset, isBig);
|
||||
|
|
|
@ -291,7 +291,7 @@ MachOFileLayout::MachOFileLayout(const NormalizedFile &file)
|
|||
uint64_t offset = _startOfSectionsContent;
|
||||
for (const Section § : file.sections) {
|
||||
if (sect.type != llvm::MachO::S_ZEROFILL) {
|
||||
offset = llvm::RoundUpToAlignment(offset, 1 << sect.alignment);
|
||||
offset = llvm::RoundUpToAlignment(offset, sect.alignment.get());
|
||||
_sectInfo[§].fileOffset = offset;
|
||||
offset += sect.content.size();
|
||||
} else {
|
||||
|
@ -613,7 +613,7 @@ std::error_code MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {
|
|||
sout->addr = sin.address;
|
||||
sout->size = sin.content.size();
|
||||
sout->offset = _sectInfo[&sin].fileOffset;
|
||||
sout->align = sin.alignment;
|
||||
sout->align = llvm::Log2_32(sin.alignment.get());
|
||||
sout->reloff = sin.relocations.empty() ? 0 : relOffset;
|
||||
sout->nreloc = sin.relocations.size();
|
||||
sout->flags = sin.type | sin.attributes;
|
||||
|
@ -661,7 +661,7 @@ std::error_code MachOFileLayout::writeSegmentLoadCommands(uint8_t *&lc) {
|
|||
sect->offset = 0;
|
||||
else
|
||||
sect->offset = section->address - seg.address + segInfo.fileOffset;
|
||||
sect->align = section->alignment;
|
||||
sect->align = llvm::Log2_32(section->alignment.get());
|
||||
sect->reloff = 0;
|
||||
sect->nreloc = 0;
|
||||
sect->flags = section->type | section->attributes;
|
||||
|
@ -1343,4 +1343,3 @@ std::error_code writeBinary(const NormalizedFile &file, StringRef path) {
|
|||
} // namespace normalized
|
||||
} // namespace mach_o
|
||||
} // namespace lld
|
||||
|
||||
|
|
|
@ -328,7 +328,7 @@ void Util::appendAtom(SectionInfo *sect, const DefinedAtom *atom) {
|
|||
// Figure out offset for atom in this section given alignment constraints.
|
||||
uint64_t offset = sect->size;
|
||||
DefinedAtom::Alignment atomAlign = atom->alignment();
|
||||
uint64_t align2 = 1 << atomAlign.powerOf2;
|
||||
uint64_t align2 = atomAlign.powerOf2.get();
|
||||
uint64_t requiredModulus = atomAlign.modulus;
|
||||
uint64_t currentModulus = (offset % align2);
|
||||
if ( currentModulus != requiredModulus ) {
|
||||
|
@ -338,7 +338,7 @@ void Util::appendAtom(SectionInfo *sect, const DefinedAtom *atom) {
|
|||
offset += align2+requiredModulus-currentModulus;
|
||||
}
|
||||
// Record max alignment of any atom in this section.
|
||||
if ( atomAlign.powerOf2 > sect->alignment )
|
||||
if (align2 > sect->alignment.get())
|
||||
sect->alignment = atomAlign.powerOf2;
|
||||
// Assign atom to this section with this offset.
|
||||
AtomInfo ai = {atom, offset};
|
||||
|
@ -454,7 +454,7 @@ void Util::organizeSections() {
|
|||
}
|
||||
|
||||
uint64_t Util::alignTo(uint64_t value, PowerOf2 align2) {
|
||||
return llvm::RoundUpToAlignment(value, 1 << align2);
|
||||
return llvm::RoundUpToAlignment(value, align2.get());
|
||||
}
|
||||
|
||||
|
||||
|
@ -477,7 +477,7 @@ void Util::layoutSectionsInTextSegment(size_t hlcSize, SegmentInfo *seg,
|
|||
for (auto it = seg->sections.rbegin(); it != seg->sections.rend(); ++it) {
|
||||
SectionInfo *sect = *it;
|
||||
taddr -= sect->size;
|
||||
taddr = taddr & (0 - (1 << sect->alignment));
|
||||
taddr = taddr & (0 - sect->alignment.get());
|
||||
}
|
||||
int64_t padding = taddr - hlcSize;
|
||||
while (padding < 0)
|
||||
|
|
|
@ -53,6 +53,20 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(DataInCode)
|
|||
namespace llvm {
|
||||
namespace yaml {
|
||||
|
||||
template <>
|
||||
struct ScalarTraits<lld::PowerOf2> {
|
||||
static void output(const lld::PowerOf2 &value, void*, raw_ostream &out) {
|
||||
out << llvm::format("%d", value);
|
||||
}
|
||||
static StringRef input(StringRef scalar, void*, lld::PowerOf2 &result) {
|
||||
uint32_t value;
|
||||
scalar.getAsInteger(10, value);
|
||||
result = lld::PowerOf2(value);
|
||||
return StringRef();
|
||||
}
|
||||
static bool mustQuote(StringRef) { return false; }
|
||||
};
|
||||
|
||||
// A vector of Sections is a sequence.
|
||||
template<>
|
||||
struct SequenceTraits< std::vector<Section> > {
|
||||
|
@ -276,7 +290,7 @@ struct MappingTraits<Section> {
|
|||
io.mapRequired("section", sect.sectionName);
|
||||
io.mapRequired("type", sect.type);
|
||||
io.mapOptional("attributes", sect.attributes);
|
||||
io.mapOptional("alignment", sect.alignment, 0U);
|
||||
io.mapOptional("alignment", sect.alignment, lld::PowerOf2(0));
|
||||
io.mapRequired("address", sect.address);
|
||||
if (sect.type == llvm::MachO::S_ZEROFILL) {
|
||||
// S_ZEROFILL sections use "size:" instead of "content:"
|
||||
|
@ -799,4 +813,3 @@ std::error_code writeYaml(const NormalizedFile &file, raw_ostream &out) {
|
|||
} // namespace normalized
|
||||
} // namespace mach_o
|
||||
} // namespace lld
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ private:
|
|||
NativeAtomAttributesV1 computeAttributesV1(const DefinedAtom& atom) {
|
||||
NativeAtomAttributesV1 attrs;
|
||||
attrs.sectionNameOffset = sectionNameOffset(atom);
|
||||
attrs.align2 = atom.alignment().powerOf2;
|
||||
attrs.align2 = llvm::Log2_32(atom.alignment().powerOf2.get());
|
||||
attrs.alignModulus = atom.alignment().modulus;
|
||||
attrs.scope = atom.scope();
|
||||
attrs.interposable = atom.interposable();
|
||||
|
|
|
@ -849,10 +849,10 @@ uint64_t AtomChunk::memAlign() const {
|
|||
// the section. We restore that here.
|
||||
if (_atomLayouts.empty())
|
||||
return _ctx.getPageSize();
|
||||
int align = _ctx.getPageSize();
|
||||
unsigned align = _ctx.getPageSize();
|
||||
for (auto atomLayout : _atomLayouts) {
|
||||
auto *atom = cast<const DefinedAtom>(atomLayout->_atom);
|
||||
align = std::max(align, 1 << atom->alignment().powerOf2);
|
||||
align = std::max(align, (unsigned)atom->alignment().powerOf2.get());
|
||||
}
|
||||
return align;
|
||||
}
|
||||
|
@ -860,7 +860,7 @@ uint64_t AtomChunk::memAlign() const {
|
|||
void AtomChunk::appendAtom(const DefinedAtom *atom) {
|
||||
// Atom may have to be at a proper alignment boundary. If so, move the
|
||||
// pointer to make a room after the last atom before adding new one.
|
||||
_size = llvm::RoundUpToAlignment(_size, 1 << atom->alignment().powerOf2);
|
||||
_size = llvm::RoundUpToAlignment(_size, atom->alignment().powerOf2.get());
|
||||
|
||||
// Create an AtomLayout and move the current pointer.
|
||||
auto *layout = new (_alloc) AtomLayout(atom, _size, _size);
|
||||
|
|
|
@ -484,9 +484,9 @@ template <> struct ScalarTraits<lld::DefinedAtom::Alignment> {
|
|||
static void output(const lld::DefinedAtom::Alignment &value, void *ctxt,
|
||||
raw_ostream &out) {
|
||||
if (value.modulus == 0) {
|
||||
out << llvm::format("%d", 1U << value.powerOf2);
|
||||
out << llvm::format("%d", value.powerOf2.get());
|
||||
} else {
|
||||
out << llvm::format("%d mod %d", value.modulus, 1U << value.powerOf2);
|
||||
out << llvm::format("%d mod %d", value.modulus, value.powerOf2.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -509,7 +509,7 @@ template <> struct ScalarTraits<lld::DefinedAtom::Alignment> {
|
|||
if (scalar.getAsInteger(0, power)) {
|
||||
return "malformed alignment power";
|
||||
}
|
||||
value.powerOf2 = llvm::Log2_64(power);
|
||||
value.powerOf2 = PowerOf2(llvm::Log2_64(power));
|
||||
if (value.modulus >= power) {
|
||||
return "malformed alignment, modulus too large for power";
|
||||
}
|
||||
|
|
|
@ -273,7 +273,7 @@ TEST(BinaryReaderTest, hello_obj_x86_64) {
|
|||
EXPECT_EQ(text.type, S_REGULAR);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 4U);
|
||||
EXPECT_EQ(text.alignment.get(), 16U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(text.content.size(), 45UL);
|
||||
EXPECT_EQ((int)(text.content[0]), 0x55);
|
||||
|
@ -298,7 +298,7 @@ TEST(BinaryReaderTest, hello_obj_x86_64) {
|
|||
EXPECT_TRUE(cstring.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ(cstring.type, S_CSTRING_LITERALS);
|
||||
EXPECT_EQ(cstring.attributes, SectionAttr(0));
|
||||
EXPECT_EQ(cstring.alignment, 0U);
|
||||
EXPECT_EQ(cstring.alignment.get(), 1U);
|
||||
EXPECT_EQ(cstring.address, Hex64(0x02D));
|
||||
EXPECT_EQ(cstring.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(cstring.content[0]), 0x68);
|
||||
|
@ -399,7 +399,7 @@ TEST(BinaryReaderTest, hello_obj_x86) {
|
|||
EXPECT_EQ(text.type, S_REGULAR);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 4U);
|
||||
EXPECT_EQ(text.alignment.get(), 16U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(text.content.size(), 48UL);
|
||||
EXPECT_EQ((int)(text.content[0]), 0x55);
|
||||
|
@ -434,7 +434,7 @@ TEST(BinaryReaderTest, hello_obj_x86) {
|
|||
EXPECT_TRUE(cstring.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ(cstring.type, S_CSTRING_LITERALS);
|
||||
EXPECT_EQ(cstring.attributes, SectionAttr(0));
|
||||
EXPECT_EQ(cstring.alignment, 0U);
|
||||
EXPECT_EQ(cstring.alignment.get(), 1U);
|
||||
EXPECT_EQ(cstring.address, Hex64(0x030));
|
||||
EXPECT_EQ(cstring.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(cstring.content[0]), 0x68);
|
||||
|
@ -532,7 +532,7 @@ TEST(BinaryReaderTest, hello_obj_armv7) {
|
|||
EXPECT_EQ(text.type, S_REGULAR);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 2U);
|
||||
EXPECT_EQ(text.alignment.get(), 4U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(text.content.size(), 42UL);
|
||||
EXPECT_EQ((int)(text.content[0]), 0x80);
|
||||
|
@ -576,7 +576,7 @@ TEST(BinaryReaderTest, hello_obj_armv7) {
|
|||
EXPECT_TRUE(cstring.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ(cstring.type, S_CSTRING_LITERALS);
|
||||
EXPECT_EQ(cstring.attributes, SectionAttr(0));
|
||||
EXPECT_EQ(cstring.alignment, 0U);
|
||||
EXPECT_EQ(cstring.alignment.get(), 1U);
|
||||
EXPECT_EQ(cstring.address, Hex64(0x02A));
|
||||
EXPECT_EQ(cstring.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(cstring.content[0]), 0x68);
|
||||
|
@ -677,7 +677,7 @@ TEST(BinaryReaderTest, hello_obj_ppc) {
|
|||
EXPECT_EQ(text.type, S_REGULAR);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 2U);
|
||||
EXPECT_EQ(text.alignment.get(), 4U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(text.content.size(), 68UL);
|
||||
EXPECT_EQ((int)(text.content[0]), 0x7C);
|
||||
|
@ -720,7 +720,7 @@ TEST(BinaryReaderTest, hello_obj_ppc) {
|
|||
EXPECT_TRUE(cstring.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ(cstring.type, S_CSTRING_LITERALS);
|
||||
EXPECT_EQ(cstring.attributes, SectionAttr(0));
|
||||
EXPECT_EQ(cstring.alignment, 2U);
|
||||
EXPECT_EQ(cstring.alignment.get(), 4U);
|
||||
EXPECT_EQ(cstring.address, Hex64(0x044));
|
||||
EXPECT_EQ(cstring.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(cstring.content[0]), 0x68);
|
||||
|
|
|
@ -123,7 +123,7 @@ TEST(BinaryWriterTest, obj_relocs_x86_64) {
|
|||
text.type = S_REGULAR;
|
||||
text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS);
|
||||
text.alignment = 4;
|
||||
text.alignment = lld::PowerOf2(4);
|
||||
text.address = 0;
|
||||
const uint8_t textBytes[] = {
|
||||
0xe8, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05,
|
||||
|
@ -179,7 +179,7 @@ TEST(BinaryWriterTest, obj_relocs_x86_64) {
|
|||
EXPECT_EQ(S_REGULAR, text.type);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 4U);
|
||||
EXPECT_EQ(text.alignment.get(), 16U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(48UL, text.content.size());
|
||||
const Relocation& call = text.relocations[0];
|
||||
|
@ -240,7 +240,7 @@ TEST(BinaryWriterTest, obj_relocs_x86) {
|
|||
text.type = S_REGULAR;
|
||||
text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS);
|
||||
text.alignment = 4;
|
||||
text.alignment = lld::PowerOf2(4);
|
||||
text.address = 0;
|
||||
const uint8_t textBytes[] = {
|
||||
0xe8, 0xfb, 0xff, 0xff, 0xff, 0xa1, 0x00, 0x00,
|
||||
|
@ -290,7 +290,7 @@ TEST(BinaryWriterTest, obj_relocs_x86) {
|
|||
EXPECT_EQ(S_REGULAR, text.type);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 4U);
|
||||
EXPECT_EQ(text.alignment.get(), 16U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(22UL, text.content.size());
|
||||
const Relocation& call = text.relocations[0];
|
||||
|
@ -350,7 +350,7 @@ TEST(BinaryWriterTest, obj_relocs_armv7) {
|
|||
text.type = S_REGULAR;
|
||||
text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS);
|
||||
text.alignment = 2;
|
||||
text.alignment = lld::PowerOf2(2);
|
||||
text.address = 0;
|
||||
const uint8_t textBytes[] = {
|
||||
0xff, 0xf7, 0xfe, 0xef, 0x40, 0xf2, 0x05, 0x01,
|
||||
|
@ -415,7 +415,7 @@ TEST(BinaryWriterTest, obj_relocs_armv7) {
|
|||
EXPECT_EQ(S_REGULAR, text.type);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 2U);
|
||||
EXPECT_EQ(text.alignment.get(), 4U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(18UL, text.content.size());
|
||||
const Relocation& blx = text.relocations[0];
|
||||
|
@ -479,7 +479,7 @@ TEST(BinaryWriterTest, obj_relocs_ppc) {
|
|||
text.type = S_REGULAR;
|
||||
text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS);
|
||||
text.alignment = 2;
|
||||
text.alignment = lld::PowerOf2(2);
|
||||
text.address = 0;
|
||||
const uint8_t textBytes[] = {
|
||||
0x48, 0x00, 0x00, 0x01, 0x40, 0x82, 0xff, 0xfc,
|
||||
|
@ -571,7 +571,7 @@ TEST(BinaryWriterTest, obj_relocs_ppc) {
|
|||
EXPECT_EQ(S_REGULAR, text.type);
|
||||
EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS
|
||||
| S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(text.alignment, 2U);
|
||||
EXPECT_EQ(text.alignment.get(), 4U);
|
||||
EXPECT_EQ(text.address, Hex64(0x0));
|
||||
EXPECT_EQ(44UL, text.content.size());
|
||||
const Relocation& br24 = text.relocations[0];
|
||||
|
@ -690,4 +690,3 @@ TEST(BinaryWriterTest, obj_relocs_ppc) {
|
|||
std::error_code ec = llvm::sys::fs::remove(Twine(tmpFl));
|
||||
EXPECT_FALSE(ec);
|
||||
}
|
||||
|
||||
|
|
|
@ -213,7 +213,7 @@ TEST(ObjectFileYAML, oneSection) {
|
|||
EXPECT_EQ((uint32_t)(sect.type), (uint32_t)(llvm::MachO::S_REGULAR));
|
||||
EXPECT_EQ((uint32_t)(sect.attributes),
|
||||
(uint32_t)(llvm::MachO::S_ATTR_PURE_INSTRUCTIONS));
|
||||
EXPECT_EQ(sect.alignment, 1U);
|
||||
EXPECT_EQ(sect.alignment.get(), 2U);
|
||||
EXPECT_EQ((uint64_t)sect.address, 0x12345678ULL);
|
||||
EXPECT_EQ(sect.content.size(), 2UL);
|
||||
EXPECT_EQ((int)(sect.content[0]), 0x90);
|
||||
|
@ -286,7 +286,7 @@ TEST(ObjectFileYAML, hello_x86_64) {
|
|||
EXPECT_EQ((uint32_t)(sect1.attributes),
|
||||
(uint32_t)(llvm::MachO::S_ATTR_PURE_INSTRUCTIONS
|
||||
| llvm::MachO::S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(sect1.alignment, 0U);
|
||||
EXPECT_EQ(sect1.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect1.address, 0x0ULL);
|
||||
EXPECT_EQ(sect1.content.size(), 22UL);
|
||||
EXPECT_EQ((int)(sect1.content[0]), 0x55);
|
||||
|
@ -316,7 +316,7 @@ TEST(ObjectFileYAML, hello_x86_64) {
|
|||
EXPECT_TRUE(sect2.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ((uint32_t)(sect2.type), (uint32_t)(llvm::MachO::S_CSTRING_LITERALS));
|
||||
EXPECT_EQ((uint32_t)(sect2.attributes), 0U);
|
||||
EXPECT_EQ(sect2.alignment, 0U);
|
||||
EXPECT_EQ(sect2.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect2.address, 0x016ULL);
|
||||
EXPECT_EQ(sect2.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(sect2.content[0]), 0x68);
|
||||
|
@ -417,7 +417,7 @@ TEST(ObjectFileYAML, hello_x86) {
|
|||
EXPECT_EQ((uint32_t)(sect1.attributes),
|
||||
(uint32_t)(llvm::MachO::S_ATTR_PURE_INSTRUCTIONS
|
||||
| llvm::MachO::S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(sect1.alignment, 0U);
|
||||
EXPECT_EQ(sect1.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect1.address, 0x0ULL);
|
||||
EXPECT_EQ(sect1.content.size(), 33UL);
|
||||
EXPECT_EQ((int)(sect1.content[0]), 0x55);
|
||||
|
@ -454,7 +454,7 @@ TEST(ObjectFileYAML, hello_x86) {
|
|||
EXPECT_TRUE(sect2.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ((uint32_t)(sect2.type), (uint32_t)(llvm::MachO::S_CSTRING_LITERALS));
|
||||
EXPECT_EQ((uint32_t)(sect2.attributes), 0U);
|
||||
EXPECT_EQ(sect2.alignment, 0U);
|
||||
EXPECT_EQ(sect2.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect2.address, 0x021ULL);
|
||||
EXPECT_EQ(sect2.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(sect2.content[0]), 0x68);
|
||||
|
@ -545,7 +545,7 @@ TEST(ObjectFileYAML, hello_armv6) {
|
|||
EXPECT_EQ((uint32_t)(sect1.attributes),
|
||||
(uint32_t)(llvm::MachO::S_ATTR_PURE_INSTRUCTIONS
|
||||
| llvm::MachO::S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(sect1.alignment, 2U);
|
||||
EXPECT_EQ(sect1.alignment.get(), 4U);
|
||||
EXPECT_EQ((uint64_t)sect1.address, 0x0ULL);
|
||||
EXPECT_EQ(sect1.content.size(), 32UL);
|
||||
EXPECT_EQ((int)(sect1.content[0]), 0x80);
|
||||
|
@ -582,7 +582,7 @@ TEST(ObjectFileYAML, hello_armv6) {
|
|||
EXPECT_TRUE(sect2.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ((uint32_t)(sect2.type), (uint32_t)(llvm::MachO::S_CSTRING_LITERALS));
|
||||
EXPECT_EQ((uint32_t)(sect2.attributes), 0U);
|
||||
EXPECT_EQ(sect2.alignment, 0U);
|
||||
EXPECT_EQ(sect2.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect2.address, 0x020ULL);
|
||||
EXPECT_EQ(sect2.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(sect2.content[0]), 0x68);
|
||||
|
@ -687,7 +687,7 @@ TEST(ObjectFileYAML, hello_armv7) {
|
|||
EXPECT_EQ((uint32_t)(sect1.attributes),
|
||||
(uint32_t)(llvm::MachO::S_ATTR_PURE_INSTRUCTIONS
|
||||
| llvm::MachO::S_ATTR_SOME_INSTRUCTIONS));
|
||||
EXPECT_EQ(sect1.alignment, 1U);
|
||||
EXPECT_EQ(sect1.alignment.get(), 2U);
|
||||
EXPECT_EQ((uint64_t)sect1.address, 0x0ULL);
|
||||
EXPECT_EQ(sect1.content.size(), 22UL);
|
||||
EXPECT_EQ((int)(sect1.content[0]), 0x80);
|
||||
|
@ -740,7 +740,7 @@ TEST(ObjectFileYAML, hello_armv7) {
|
|||
EXPECT_TRUE(sect2.sectionName.equals("__cstring"));
|
||||
EXPECT_EQ((uint32_t)(sect2.type), (uint32_t)(llvm::MachO::S_CSTRING_LITERALS));
|
||||
EXPECT_EQ((uint32_t)(sect2.attributes), 0U);
|
||||
EXPECT_EQ(sect2.alignment, 0U);
|
||||
EXPECT_EQ(sect2.alignment.get(), 1U);
|
||||
EXPECT_EQ((uint64_t)sect2.address, 0x016ULL);
|
||||
EXPECT_EQ(sect2.content.size(), 7UL);
|
||||
EXPECT_EQ((int)(sect2.content[0]), 0x68);
|
||||
|
|
Loading…
Reference in New Issue