@@ -1504,3 +1504,39 @@ TEST(ELFObjectFileTest, GetSectionAndRelocations) {
1504
1504
" SHT_RELA section with index 1: failed to get a "
1505
1505
" relocated section: invalid section index: 255" );
1506
1506
}
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