Skip to content

Commit 0e9aab8

Browse files
committed
Add ELFObjectFileTest::ELFSymbolRefLess
1 parent b6630e8 commit 0e9aab8

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

llvm/unittests/Object/ELFObjectFileTest.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,3 +1504,39 @@ TEST(ELFObjectFileTest, GetSectionAndRelocations) {
15041504
"SHT_RELA section with index 1: failed to get a "
15051505
"relocated section: invalid section index: 255");
15061506
}
1507+
1508+
TEST(ELFObjectFileTest, ELFSymbolRefLess) {
1509+
SmallString<0> Storage;
1510+
Expected<ELFObjectFile<ELF64LE>> ElfOrErr = toBinary<ELF64LE>(Storage, R"(
1511+
--- !ELF
1512+
FileHeader:
1513+
Class: ELFCLASS64
1514+
Data: ELFDATA2LSB
1515+
Type: ET_DYN
1516+
Machine: EM_X86_64
1517+
)");
1518+
1519+
ASSERT_THAT_EXPECTED(ElfOrErr, Succeeded());
1520+
const ELFObjectFile<ELF64LE> &Obj = *ElfOrErr;
1521+
1522+
llvm::object::DataRefImpl Data1;
1523+
Data1.d.a = 0x00000000;
1524+
Data1.d.b = 0x00000001;
1525+
SymbolRef Symbol1(Data1, &Obj);
1526+
ELFSymbolRef ELFSymbol1(Symbol1);
1527+
1528+
llvm::object::DataRefImpl Data2;
1529+
Data2.d.a = 0x00000000;
1530+
Data2.d.b = 0x00000100;
1531+
SymbolRef Symbol2(Data2, &Obj);
1532+
ELFSymbolRef ELFSymbol2(Symbol2);
1533+
1534+
// SymbolRef operator< uses std::memcmp treating the union as char string.
1535+
if (llvm::sys::IsLittleEndianHost)
1536+
EXPECT_FALSE(Symbol1 < Symbol2);
1537+
else
1538+
EXPECT_TRUE(Symbol1 < Symbol2);
1539+
1540+
// ELFSymbolRef operator< compares struct fields.
1541+
EXPECT_TRUE(ELFSymbol1 < ELFSymbol2);
1542+
}

0 commit comments

Comments
 (0)