From fb26c329afbe8cf7d55868b3299aed5e63c02868 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Thu, 14 Mar 2019 23:08:19 +0000 Subject: [PATCH] [MC] Sort FDEs by the associated CIE before emitting them. This isn't necessary according to the DWARF standard, but it matches the .eh_frame sections emitted by other tools in practice, and the Android libunwindstack rejects .eh_frame sections where an FDE refers to a CIE other than the closest previous CIE. So match the other tools and also sort accordingly. I consider this a bug in libunwindstack, but it's easy enough to emit a compatible .eh_frame section for compatibility with installed operating systems. Differential Revision: https://reviews.llvm.org/D58266 llvm-svn: 356216 --- llvm/lib/MC/MCDwarf.cpp | 26 +- llvm/test/CodeGen/AArch64/arm64-big-endian-eh.ll | 2 + llvm/test/MC/ELF/cfi-signal-frame.s | 12 +- llvm/test/MC/ELF/cfi.s | 370 +++++++++++------------ 4 files changed, 217 insertions(+), 193 deletions(-) diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index 2b5bb61..83b6b4f 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -1763,6 +1763,20 @@ struct CIEKey { IsSimple(Frame.IsSimple), RAReg(Frame.RAReg), IsBKeyFrame(Frame.IsBKeyFrame) {} + StringRef PersonalityName() const { + if (!Personality) + return StringRef(); + return Personality->getName(); + } + + bool operator<(const CIEKey &Other) const { + return std::make_tuple(PersonalityName(), PersonalityEncoding, LsdaEncoding, + IsSignalFrame, IsSimple, RAReg) < + std::make_tuple(Other.PersonalityName(), Other.PersonalityEncoding, + Other.LsdaEncoding, Other.IsSignalFrame, + Other.IsSimple, Other.RAReg); + } + const MCSymbol *Personality; unsigned PersonalityEncoding; unsigned LsdaEncoding; @@ -1840,7 +1854,17 @@ void MCDwarfFrameEmitter::Emit(MCObjectStreamer &Streamer, MCAsmBackend *MAB, const MCSymbol *DummyDebugKey = nullptr; bool CanOmitDwarf = MOFI->getOmitDwarfIfHaveCompactUnwind(); - for (auto I = FrameArray.begin(), E = FrameArray.end(); I != E;) { + // Sort the FDEs by their corresponding CIE before we emit them. + // This isn't technically necessary according to the DWARF standard, + // but the Android libunwindstack rejects eh_frame sections where + // an FDE refers to a CIE other than the closest previous CIE. + std::vector FrameArrayX(FrameArray.begin(), FrameArray.end()); + std::stable_sort( + FrameArrayX.begin(), FrameArrayX.end(), + [&](const MCDwarfFrameInfo &X, const MCDwarfFrameInfo &Y) -> bool { + return CIEKey(X) < CIEKey(Y); + }); + for (auto I = FrameArrayX.begin(), E = FrameArrayX.end(); I != E;) { const MCDwarfFrameInfo &Frame = *I; ++I; if (CanOmitDwarf && Frame.CompactUnwindEncoding != diff --git a/llvm/test/CodeGen/AArch64/arm64-big-endian-eh.ll b/llvm/test/CodeGen/AArch64/arm64-big-endian-eh.ll index 77d52e3..b387209 100644 --- a/llvm/test/CodeGen/AArch64/arm64-big-endian-eh.ll +++ b/llvm/test/CodeGen/AArch64/arm64-big-endian-eh.ll @@ -69,5 +69,7 @@ define linkonce_odr hidden void @__clang_call_terminate(i8*) #1 { declare void @_ZSt9terminatev() ; CHECK-LABEL: Contents of section .eh_frame: +; CHECK-NEXT: {{^ 0000}} +; CHECK-NEXT: {{^ 0010}} ; CHECK-NEXT: 0000 0000001c diff --git a/llvm/test/MC/ELF/cfi-signal-frame.s b/llvm/test/MC/ELF/cfi-signal-frame.s index 334cdb4..63244f3 100644 --- a/llvm/test/MC/ELF/cfi-signal-frame.s +++ b/llvm/test/MC/ELF/cfi-signal-frame.s @@ -23,11 +23,11 @@ g: // CHECK-NEXT: AddressAlignment: 8 // CHECK-NEXT: EntrySize: 0 // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 14000000 00000000 017A5253 00017810 -// CHECK-NEXT: 0010: 011B0C07 08900100 10000000 1C000000 -// CHECK-NEXT: 0020: 00000000 00000000 00000000 14000000 -// CHECK-NEXT: 0030: 00000000 017A5200 01781001 1B0C0708 -// CHECK-NEXT: 0040: 90010000 10000000 1C000000 00000000 -// CHECK-NEXT: 0050: 00000000 00000000 +// CHECK-NEXT: 0000: 14000000 00000000 017A5200 01781001 |.........zR..x..| +// CHECK-NEXT: 0010: 1B0C0708 90010000 10000000 1C000000 |................| +// CHECK-NEXT: 0020: 00000000 00000000 00000000 14000000 |................| +// CHECK-NEXT: 0030: 00000000 017A5253 00017810 011B0C07 |.....zRS..x.....| +// CHECK-NEXT: 0040: 08900100 10000000 1C000000 00000000 |................| +// CHECK-NEXT: 0050: 00000000 00000000 |........| // CHECK-NEXT: ) // CHECK-NEXT: } diff --git a/llvm/test/MC/ELF/cfi.s b/llvm/test/MC/ELF/cfi.s index 1e9a39d..abc987d 100644 --- a/llvm/test/MC/ELF/cfi.s +++ b/llvm/test/MC/ELF/cfi.s @@ -234,119 +234,117 @@ f37: // CHECK-NEXT: Relocations [ // CHECK-NEXT: ] // CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 14000000 00000000 017A4C52 00017810 -// CHECK-NEXT: 0010: 02031B0C 07089001 14000000 1C000000 -// CHECK-NEXT: 0020: 00000000 01000000 04000000 00000000 -// CHECK-NEXT: 0030: 20000000 00000000 017A504C 52000178 -// CHECK-NEXT: 0040: 100B0000 00000000 00000003 1B0C0708 -// CHECK-NEXT: 0050: 90010000 14000000 28000000 00000000 -// CHECK-NEXT: 0060: 01000000 04000000 00000000 14000000 -// CHECK-NEXT: 0070: 70000000 00000000 01000000 04000000 -// CHECK-NEXT: 0080: 00000000 20000000 00000000 017A504C -// CHECK-NEXT: 0090: 52000178 100B0000 00000000 00000002 -// CHECK-NEXT: 00A0: 1B0C0708 90010000 10000000 28000000 -// CHECK-NEXT: 00B0: 00000000 01000000 02000000 18000000 -// CHECK-NEXT: 00C0: 00000000 017A5052 00017810 04020000 -// CHECK-NEXT: 00D0: 1B0C0708 90010000 10000000 20000000 -// CHECK-NEXT: 00E0: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 00F0: 00000000 017A5052 00017810 06030000 -// CHECK-NEXT: 0100: 00001B0C 07089001 10000000 20000000 -// CHECK-NEXT: 0110: 00000000 01000000 00000000 1C000000 -// CHECK-NEXT: 0120: 00000000 017A5052 00017810 0A040000 -// CHECK-NEXT: 0130: 00000000 00001B0C 07089001 10000000 -// CHECK-NEXT: 0140: 24000000 00000000 01000000 00000000 -// CHECK-NEXT: 0150: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0160: 040A0000 1B0C0708 90010000 10000000 -// CHECK-NEXT: 0170: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 0180: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0190: 060B0000 00001B0C 07089001 10000000 -// CHECK-NEXT: 01A0: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 01B0: 1C000000 00000000 017A5052 00017810 -// CHECK-NEXT: 01C0: 0A0C0000 00000000 00001B0C 07089001 -// CHECK-NEXT: 01D0: 10000000 24000000 00000000 01000000 -// CHECK-NEXT: 01E0: 00000000 1C000000 00000000 017A5052 -// CHECK-NEXT: 01F0: 00017810 0A080000 00000000 00001B0C -// CHECK-NEXT: 0200: 07089001 10000000 24000000 00000000 -// CHECK-NEXT: 0210: 01000000 00000000 1C000000 00000000 -// CHECK-NEXT: 0220: 017A5052 00017810 0A100000 00000000 -// CHECK-NEXT: 0230: 00001B0C 07089001 10000000 24000000 -// CHECK-NEXT: 0240: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 0250: 00000000 017A5052 00017810 04120000 -// CHECK-NEXT: 0260: 1B0C0708 90010000 10000000 20000000 -// CHECK-NEXT: 0270: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 0280: 00000000 017A5052 00017810 06130000 -// CHECK-NEXT: 0290: 00001B0C 07089001 10000000 20000000 -// CHECK-NEXT: 02A0: 00000000 01000000 00000000 1C000000 -// CHECK-NEXT: 02B0: 00000000 017A5052 00017810 0A140000 -// CHECK-NEXT: 02C0: 00000000 00001B0C 07089001 10000000 -// CHECK-NEXT: 02D0: 24000000 00000000 01000000 00000000 -// CHECK-NEXT: 02E0: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 02F0: 041A0000 1B0C0708 90010000 10000000 -// CHECK-NEXT: 0300: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 0310: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0320: 061B0000 00001B0C 07089001 10000000 -// CHECK-NEXT: 0330: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 0340: 1C000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0350: 0A1C0000 00000000 00001B0C 07089001 -// CHECK-NEXT: 0360: 10000000 24000000 00000000 01000000 -// CHECK-NEXT: 0370: 00000000 1C000000 00000000 017A5052 -// CHECK-NEXT: 0380: 00017810 0A180000 00000000 00001B0C -// CHECK-NEXT: 0390: 07089001 10000000 24000000 00000000 -// CHECK-NEXT: 03A0: 01000000 00000000 1C000000 00000000 -// CHECK-NEXT: 03B0: 017A5052 00017810 0A800000 00000000 -// CHECK-NEXT: 03C0: 00001B0C 07089001 10000000 24000000 -// CHECK-NEXT: 03D0: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 03E0: 00000000 017A5052 00017810 04820000 -// CHECK-NEXT: 03F0: 1B0C0708 90010000 10000000 20000000 -// CHECK-NEXT: 0400: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 0410: 00000000 017A5052 00017810 06830000 -// CHECK-NEXT: 0420: 00001B0C 07089001 10000000 20000000 -// CHECK-NEXT: 0430: 00000000 01000000 00000000 1C000000 -// CHECK-NEXT: 0440: 00000000 017A5052 00017810 0A840000 -// CHECK-NEXT: 0450: 00000000 00001B0C 07089001 10000000 -// CHECK-NEXT: 0460: 24000000 00000000 01000000 00000000 -// CHECK-NEXT: 0470: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0480: 048A0000 1B0C0708 90010000 10000000 -// CHECK-NEXT: 0490: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 04A0: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 04B0: 068B0000 00001B0C 07089001 10000000 -// CHECK-NEXT: 04C0: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 04D0: 1C000000 00000000 017A5052 00017810 -// CHECK-NEXT: 04E0: 0A8C0000 00000000 00001B0C 07089001 -// CHECK-NEXT: 04F0: 10000000 24000000 00000000 01000000 -// CHECK-NEXT: 0500: 00000000 1C000000 00000000 017A5052 -// CHECK-NEXT: 0510: 00017810 0A880000 00000000 00001B0C -// CHECK-NEXT: 0520: 07089001 10000000 24000000 00000000 -// CHECK-NEXT: 0530: 01000000 00000000 1C000000 00000000 -// CHECK-NEXT: 0540: 017A5052 00017810 0A900000 00000000 -// CHECK-NEXT: 0550: 00001B0C 07089001 10000000 24000000 -// CHECK-NEXT: 0560: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 0570: 00000000 017A5052 00017810 04920000 -// CHECK-NEXT: 0580: 1B0C0708 90010000 10000000 20000000 -// CHECK-NEXT: 0590: 00000000 01000000 00000000 18000000 -// CHECK-NEXT: 05A0: 00000000 017A5052 00017810 06930000 -// CHECK-NEXT: 05B0: 00001B0C 07089001 10000000 20000000 -// CHECK-NEXT: 05C0: 00000000 01000000 00000000 1C000000 -// CHECK-NEXT: 05D0: 00000000 017A5052 00017810 0A940000 -// CHECK-NEXT: 05E0: 00000000 00001B0C 07089001 10000000 -// CHECK-NEXT: 05F0: 24000000 00000000 01000000 00000000 -// CHECK-NEXT: 0600: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0610: 049A0000 1B0C0708 90010000 10000000 -// CHECK-NEXT: 0620: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 0630: 18000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0640: 069B0000 00001B0C 07089001 10000000 -// CHECK-NEXT: 0650: 20000000 00000000 01000000 00000000 -// CHECK-NEXT: 0660: 1C000000 00000000 017A5052 00017810 -// CHECK-NEXT: 0670: 0A9C0000 00000000 00001B0C 07089001 -// CHECK-NEXT: 0680: 10000000 24000000 00000000 01000000 -// CHECK-NEXT: 0690: 00000000 1C000000 00000000 017A5052 -// CHECK-NEXT: 06A0: 00017810 0A980000 00000000 00001B0C -// CHECK-NEXT: 06B0: 07089001 10000000 24000000 00000000 -// CHECK-NEXT: 06C0: 01000000 00000000 10000000 00000000 -// CHECK-NEXT: 06D0: 017A5200 01781001 1B000000 10000000 -// CHECK-NEXT: 06E0: 18000000 00000000 01000000 00000000 -// CHECK-NEXT: ) -// CHECK-NEXT: } +// CHECK-NEXT: 0000: 10000000 00000000 017A5200 01781001 |.........zR..x..| +// CHECK-NEXT: 0010: 1B000000 10000000 18000000 00000000 |................| +// CHECK-NEXT: 0020: 01000000 00000000 14000000 00000000 |................| +// CHECK-NEXT: 0030: 017A4C52 00017810 02031B0C 07089001 |.zLR..x.........| +// CHECK-NEXT: 0040: 14000000 1C000000 00000000 01000000 |................| +// CHECK-NEXT: 0050: 04000000 00000000 14000000 34000000 |............4...| +// CHECK-NEXT: 0060: 00000000 01000000 04000000 00000000 |................| +// CHECK-NEXT: 0070: 20000000 00000000 017A504C 52000178 | ........zPLR..x| +// CHECK-NEXT: 0080: 100B0000 00000000 00000002 1B0C0708 |................| +// CHECK-NEXT: 0090: 90010000 10000000 28000000 00000000 |........(.......| +// CHECK-NEXT: 00A0: 01000000 02000000 20000000 00000000 |........ .......| +// CHECK-NEXT: 00B0: 017A504C 52000178 100B0000 00000000 |.zPLR..x........| +// CHECK-NEXT: 00C0: 00000003 1B0C0708 90010000 14000000 |................| +// CHECK-NEXT: 00D0: 28000000 00000000 01000000 04000000 |(...............| +// CHECK-NEXT: 00E0: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 00F0: 00017810 04020000 1B0C0708 90010000 |..x.............| +// CHECK-NEXT: 0100: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 0110: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0120: 00017810 06030000 00001B0C 07089001 |..x.............| +// CHECK-NEXT: 0130: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 0140: 00000000 1C000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0150: 00017810 0A040000 00000000 00001B0C |..x.............| +// CHECK-NEXT: 0160: 07089001 10000000 24000000 00000000 |........$.......| +// CHECK-NEXT: 0170: 01000000 00000000 1C000000 00000000 |................| +// CHECK-NEXT: 0180: 017A5052 00017810 0A080000 00000000 |.zPR..x.........| +// CHECK-NEXT: 0190: 00001B0C 07089001 10000000 24000000 |............$...| +// CHECK-NEXT: 01A0: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 01B0: 00000000 017A5052 00017810 040A0000 |.....zPR..x.....| +// CHECK-NEXT: 01C0: 1B0C0708 90010000 10000000 20000000 |............ ...| +// CHECK-NEXT: 01D0: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 01E0: 00000000 017A5052 00017810 060B0000 |.....zPR..x.....| +// CHECK-NEXT: 01F0: 00001B0C 07089001 10000000 20000000 |............ ...| +// CHECK-NEXT: 0200: 00000000 01000000 00000000 1C000000 |................| +// CHECK-NEXT: 0210: 00000000 017A5052 00017810 0A0C0000 |.....zPR..x.....| +// CHECK-NEXT: 0220: 00000000 00001B0C 07089001 10000000 |................| +// CHECK-NEXT: 0230: 24000000 00000000 01000000 00000000 |$...............| +// CHECK-NEXT: 0240: 1C000000 00000000 017A5052 00017810 |.........zPR..x.| +// CHECK-NEXT: 0250: 0A100000 00000000 00001B0C 07089001 |................| +// CHECK-NEXT: 0260: 10000000 24000000 00000000 01000000 |....$...........| +// CHECK-NEXT: 0270: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0280: 00017810 04120000 1B0C0708 90010000 |..x.............| +// CHECK-NEXT: 0290: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 02A0: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 02B0: 00017810 06130000 00001B0C 07089001 |..x.............| +// CHECK-NEXT: 02C0: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 02D0: 00000000 1C000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 02E0: 00017810 0A140000 00000000 00001B0C |..x.............| +// CHECK-NEXT: 02F0: 07089001 10000000 24000000 00000000 |........$.......| +// CHECK-NEXT: 0300: 01000000 00000000 1C000000 00000000 |................| +// CHECK-NEXT: 0310: 017A5052 00017810 0A180000 00000000 |.zPR..x.........| +// CHECK-NEXT: 0320: 00001B0C 07089001 10000000 24000000 |............$...| +// CHECK-NEXT: 0330: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 0340: 00000000 017A5052 00017810 041A0000 |.....zPR..x.....| +// CHECK-NEXT: 0350: 1B0C0708 90010000 10000000 20000000 |............ ...| +// CHECK-NEXT: 0360: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 0370: 00000000 017A5052 00017810 061B0000 |.....zPR..x.....| +// CHECK-NEXT: 0380: 00001B0C 07089001 10000000 20000000 |............ ...| +// CHECK-NEXT: 0390: 00000000 01000000 00000000 1C000000 |................| +// CHECK-NEXT: 03A0: 00000000 017A5052 00017810 0A1C0000 |.....zPR..x.....| +// CHECK-NEXT: 03B0: 00000000 00001B0C 07089001 10000000 |................| +// CHECK-NEXT: 03C0: 24000000 00000000 01000000 00000000 |$...............| +// CHECK-NEXT: 03D0: 1C000000 00000000 017A5052 00017810 |.........zPR..x.| +// CHECK-NEXT: 03E0: 0A800000 00000000 00001B0C 07089001 |................| +// CHECK-NEXT: 03F0: 10000000 24000000 00000000 01000000 |....$...........| +// CHECK-NEXT: 0400: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0410: 00017810 04820000 1B0C0708 90010000 |..x.............| +// CHECK-NEXT: 0420: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 0430: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0440: 00017810 06830000 00001B0C 07089001 |..x.............| +// CHECK-NEXT: 0450: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 0460: 00000000 1C000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0470: 00017810 0A840000 00000000 00001B0C |..x.............| +// CHECK-NEXT: 0480: 07089001 10000000 24000000 00000000 |........$.......| +// CHECK-NEXT: 0490: 01000000 00000000 1C000000 00000000 |................| +// CHECK-NEXT: 04A0: 017A5052 00017810 0A880000 00000000 |.zPR..x.........| +// CHECK-NEXT: 04B0: 00001B0C 07089001 10000000 24000000 |............$...| +// CHECK-NEXT: 04C0: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 04D0: 00000000 017A5052 00017810 048A0000 |.....zPR..x.....| +// CHECK-NEXT: 04E0: 1B0C0708 90010000 10000000 20000000 |............ ...| +// CHECK-NEXT: 04F0: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 0500: 00000000 017A5052 00017810 068B0000 |.....zPR..x.....| +// CHECK-NEXT: 0510: 00001B0C 07089001 10000000 20000000 |............ ...| +// CHECK-NEXT: 0520: 00000000 01000000 00000000 1C000000 |................| +// CHECK-NEXT: 0530: 00000000 017A5052 00017810 0A8C0000 |.....zPR..x.....| +// CHECK-NEXT: 0540: 00000000 00001B0C 07089001 10000000 |................| +// CHECK-NEXT: 0550: 24000000 00000000 01000000 00000000 |$...............| +// CHECK-NEXT: 0560: 1C000000 00000000 017A5052 00017810 |.........zPR..x.| +// CHECK-NEXT: 0570: 0A900000 00000000 00001B0C 07089001 |................| +// CHECK-NEXT: 0580: 10000000 24000000 00000000 01000000 |....$...........| +// CHECK-NEXT: 0590: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 05A0: 00017810 04920000 1B0C0708 90010000 |..x.............| +// CHECK-NEXT: 05B0: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 05C0: 00000000 18000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 05D0: 00017810 06930000 00001B0C 07089001 |..x.............| +// CHECK-NEXT: 05E0: 10000000 20000000 00000000 01000000 |.... ...........| +// CHECK-NEXT: 05F0: 00000000 1C000000 00000000 017A5052 |.............zPR| +// CHECK-NEXT: 0600: 00017810 0A940000 00000000 00001B0C |..x.............| +// CHECK-NEXT: 0610: 07089001 10000000 24000000 00000000 |........$.......| +// CHECK-NEXT: 0620: 01000000 00000000 1C000000 00000000 |................| +// CHECK-NEXT: 0630: 017A5052 00017810 0A980000 00000000 |.zPR..x.........| +// CHECK-NEXT: 0640: 00001B0C 07089001 10000000 24000000 |............$...| +// CHECK-NEXT: 0650: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 0660: 00000000 017A5052 00017810 049A0000 |.....zPR..x.....| +// CHECK-NEXT: 0670: 1B0C0708 90010000 10000000 20000000 |............ ...| +// CHECK-NEXT: 0680: 00000000 01000000 00000000 18000000 |................| +// CHECK-NEXT: 0690: 00000000 017A5052 00017810 069B0000 |.....zPR..x.....| +// CHECK-NEXT: 06A0: 00001B0C 07089001 10000000 20000000 |............ ...| +// CHECK-NEXT: 06B0: 00000000 01000000 00000000 1C000000 |................| +// CHECK-NEXT: 06C0: 00000000 017A5052 00017810 0A9C0000 |.....zPR..x.....| +// CHECK-NEXT: 06D0: 00000000 00001B0C 07089001 10000000 |................| +// CHECK-NEXT: 06E0: 24000000 00000000 01000000 00000000 |$...............| // CHECK: Section { // CHECK: Index: @@ -362,78 +360,78 @@ f37: // CHECK-NEXT: AddressAlignment: 8 // CHECK-NEXT: EntrySize: 24 // CHECK-NEXT: Relocations [ -// CHECK-NEXT: 0x20 R_X86_64_PC32 .text 0x0 -// CHECK-NEXT: 0x29 R_X86_64_32 bar 0x0 -// CHECK-NEXT: 0x43 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x5C R_X86_64_PC32 .text 0x1 -// CHECK-NEXT: 0x65 R_X86_64_32 bar 0x0 -// CHECK-NEXT: 0x74 R_X86_64_PC32 .text 0x2 -// CHECK-NEXT: 0x7D R_X86_64_32 bar 0x0 -// CHECK-NEXT: 0x97 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0xB0 R_X86_64_PC32 .text 0x3 -// CHECK-NEXT: 0xB9 R_X86_64_16 bar 0x0 -// CHECK-NEXT: 0xCE R_X86_64_16 foo 0x0 -// CHECK-NEXT: 0xE0 R_X86_64_PC32 .text 0x4 -// CHECK-NEXT: 0xFE R_X86_64_32 foo 0x0 -// CHECK-NEXT: 0x110 R_X86_64_PC32 .text 0x5 -// CHECK-NEXT: 0x12E R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x144 R_X86_64_PC32 .text 0x6 -// CHECK-NEXT: 0x162 R_X86_64_16 foo 0x0 -// CHECK-NEXT: 0x174 R_X86_64_PC32 .text 0x7 -// CHECK-NEXT: 0x192 R_X86_64_32 foo 0x0 -// CHECK-NEXT: 0x1A4 R_X86_64_PC32 .text 0x8 -// CHECK-NEXT: 0x1C2 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x1D8 R_X86_64_PC32 .text 0x9 -// CHECK-NEXT: 0x1F6 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x20C R_X86_64_PC32 .text 0xA -// CHECK-NEXT: 0x22A R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x240 R_X86_64_PC32 .text 0xB -// CHECK-NEXT: 0x25E R_X86_64_PC16 foo 0x0 -// CHECK-NEXT: 0x270 R_X86_64_PC32 .text 0xC -// CHECK-NEXT: 0x28E R_X86_64_PC32 foo 0x0 -// CHECK-NEXT: 0x2A0 R_X86_64_PC32 .text 0xD -// CHECK-NEXT: 0x2BE R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x2D4 R_X86_64_PC32 .text 0xE -// CHECK-NEXT: 0x2F2 R_X86_64_PC16 foo 0x0 -// CHECK-NEXT: 0x304 R_X86_64_PC32 .text 0xF -// CHECK-NEXT: 0x322 R_X86_64_PC32 foo 0x0 -// CHECK-NEXT: 0x334 R_X86_64_PC32 .text 0x10 -// CHECK-NEXT: 0x352 R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x368 R_X86_64_PC32 .text 0x11 -// CHECK-NEXT: 0x386 R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x39C R_X86_64_PC32 .text 0x12 -// CHECK-NEXT: 0x3BA R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x3D0 R_X86_64_PC32 .text 0x13 -// CHECK-NEXT: 0x3EE R_X86_64_16 foo 0x0 -// CHECK-NEXT: 0x400 R_X86_64_PC32 .text 0x14 -// CHECK-NEXT: 0x41E R_X86_64_32 foo 0x0 -// CHECK-NEXT: 0x430 R_X86_64_PC32 .text 0x15 -// CHECK-NEXT: 0x44E R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x464 R_X86_64_PC32 .text 0x16 -// CHECK-NEXT: 0x482 R_X86_64_16 foo 0x0 -// CHECK-NEXT: 0x494 R_X86_64_PC32 .text 0x17 -// CHECK-NEXT: 0x4B2 R_X86_64_32 foo 0x0 -// CHECK-NEXT: 0x4C4 R_X86_64_PC32 .text 0x18 -// CHECK-NEXT: 0x4E2 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x4F8 R_X86_64_PC32 .text 0x19 -// CHECK-NEXT: 0x516 R_X86_64_64 foo 0x0 -// CHECK-NEXT: 0x52C R_X86_64_PC32 .text 0x1A -// CHECK-NEXT: 0x54A R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x560 R_X86_64_PC32 .text 0x1B -// CHECK-NEXT: 0x57E R_X86_64_PC16 foo 0x0 -// CHECK-NEXT: 0x590 R_X86_64_PC32 .text 0x1C -// CHECK-NEXT: 0x5AE R_X86_64_PC32 foo 0x0 -// CHECK-NEXT: 0x5C0 R_X86_64_PC32 .text 0x1D -// CHECK-NEXT: 0x5DE R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x5F4 R_X86_64_PC32 .text 0x1E -// CHECK-NEXT: 0x612 R_X86_64_PC16 foo 0x0 -// CHECK-NEXT: 0x624 R_X86_64_PC32 .text 0x1F -// CHECK-NEXT: 0x642 R_X86_64_PC32 foo 0x0 -// CHECK-NEXT: 0x654 R_X86_64_PC32 .text 0x20 -// CHECK-NEXT: 0x672 R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x688 R_X86_64_PC32 .text 0x21 -// CHECK-NEXT: 0x6A6 R_X86_64_PC64 foo 0x0 -// CHECK-NEXT: 0x6BC R_X86_64_PC32 .text 0x22 -// CHECK-NEXT: 0x6E4 R_X86_64_PC32 .text 0x23 +// CHECK-NEXT: 0x1C R_X86_64_PC32 .text 0x23 +// CHECK-NEXT: 0x48 R_X86_64_PC32 .text 0x0 +// CHECK-NEXT: 0x51 R_X86_64_32 bar 0x0 +// CHECK-NEXT: 0x60 R_X86_64_PC32 .text 0x2 +// CHECK-NEXT: 0x69 R_X86_64_32 bar 0x0 +// CHECK-NEXT: 0x83 R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x9C R_X86_64_PC32 .text 0x3 +// CHECK-NEXT: 0xA5 R_X86_64_16 bar 0x0 +// CHECK-NEXT: 0xBB R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0xD4 R_X86_64_PC32 .text 0x1 +// CHECK-NEXT: 0xDD R_X86_64_32 bar 0x0 +// CHECK-NEXT: 0xF6 R_X86_64_16 foo 0x0 +// CHECK-NEXT: 0x108 R_X86_64_PC32 .text 0x4 +// CHECK-NEXT: 0x126 R_X86_64_32 foo 0x0 +// CHECK-NEXT: 0x138 R_X86_64_PC32 .text 0x5 +// CHECK-NEXT: 0x156 R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x16C R_X86_64_PC32 .text 0x6 +// CHECK-NEXT: 0x18A R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x1A0 R_X86_64_PC32 .text 0xA +// CHECK-NEXT: 0x1BE R_X86_64_16 foo 0x0 +// CHECK-NEXT: 0x1D0 R_X86_64_PC32 .text 0x7 +// CHECK-NEXT: 0x1EE R_X86_64_32 foo 0x0 +// CHECK-NEXT: 0x200 R_X86_64_PC32 .text 0x8 +// CHECK-NEXT: 0x21E R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x234 R_X86_64_PC32 .text 0x9 +// CHECK-NEXT: 0x252 R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x268 R_X86_64_PC32 .text 0xB +// CHECK-NEXT: 0x286 R_X86_64_PC16 foo 0x0 +// CHECK-NEXT: 0x298 R_X86_64_PC32 .text 0xC +// CHECK-NEXT: 0x2B6 R_X86_64_PC32 foo 0x0 +// CHECK-NEXT: 0x2C8 R_X86_64_PC32 .text 0xD +// CHECK-NEXT: 0x2E6 R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x2FC R_X86_64_PC32 .text 0xE +// CHECK-NEXT: 0x31A R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x330 R_X86_64_PC32 .text 0x12 +// CHECK-NEXT: 0x34E R_X86_64_PC16 foo 0x0 +// CHECK-NEXT: 0x360 R_X86_64_PC32 .text 0xF +// CHECK-NEXT: 0x37E R_X86_64_PC32 foo 0x0 +// CHECK-NEXT: 0x390 R_X86_64_PC32 .text 0x10 +// CHECK-NEXT: 0x3AE R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x3C4 R_X86_64_PC32 .text 0x11 +// CHECK-NEXT: 0x3E2 R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x3F8 R_X86_64_PC32 .text 0x13 +// CHECK-NEXT: 0x416 R_X86_64_16 foo 0x0 +// CHECK-NEXT: 0x428 R_X86_64_PC32 .text 0x14 +// CHECK-NEXT: 0x446 R_X86_64_32 foo 0x0 +// CHECK-NEXT: 0x458 R_X86_64_PC32 .text 0x15 +// CHECK-NEXT: 0x476 R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x48C R_X86_64_PC32 .text 0x16 +// CHECK-NEXT: 0x4AA R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x4C0 R_X86_64_PC32 .text 0x1A +// CHECK-NEXT: 0x4DE R_X86_64_16 foo 0x0 +// CHECK-NEXT: 0x4F0 R_X86_64_PC32 .text 0x17 +// CHECK-NEXT: 0x50E R_X86_64_32 foo 0x0 +// CHECK-NEXT: 0x520 R_X86_64_PC32 .text 0x18 +// CHECK-NEXT: 0x53E R_X86_64_64 foo 0x0 +// CHECK-NEXT: 0x554 R_X86_64_PC32 .text 0x19 +// CHECK-NEXT: 0x572 R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x588 R_X86_64_PC32 .text 0x1B +// CHECK-NEXT: 0x5A6 R_X86_64_PC16 foo 0x0 +// CHECK-NEXT: 0x5B8 R_X86_64_PC32 .text 0x1C +// CHECK-NEXT: 0x5D6 R_X86_64_PC32 foo 0x0 +// CHECK-NEXT: 0x5E8 R_X86_64_PC32 .text 0x1D +// CHECK-NEXT: 0x606 R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x61C R_X86_64_PC32 .text 0x1E +// CHECK-NEXT: 0x63A R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x650 R_X86_64_PC32 .text 0x22 +// CHECK-NEXT: 0x66E R_X86_64_PC16 foo 0x0 +// CHECK-NEXT: 0x680 R_X86_64_PC32 .text 0x1F +// CHECK-NEXT: 0x69E R_X86_64_PC32 foo 0x0 +// CHECK-NEXT: 0x6B0 R_X86_64_PC32 .text 0x20 +// CHECK-NEXT: 0x6CE R_X86_64_PC64 foo 0x0 +// CHECK-NEXT: 0x6E4 R_X86_64_PC32 .text 0x21 // CHECK-NEXT: ] // CHECK: } -- 2.7.4