From dfb7518df18ad420984f965ef5ccfb4e126d839b Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 2 Sep 2021 01:00:51 -0700 Subject: [PATCH] [MC] Set SHF_INFO_LINK on SHT_REL/SHT_RELA sections sh_info links to a section, therefore SHF_INFO_LINK should be set as GNU as does. The issue has been benign because linkers kindly combines relocation sections w/ and w/o the flag. --- llvm/lib/MC/ELFObjectWriter.cpp | 2 +- llvm/test/ExecutionEngine/RuntimeDyld/SystemZ/cfi-relo-pc64.s | 1 + llvm/test/MC/ELF/cfi-adjust-cfa-offset.s | 1 + llvm/test/MC/ELF/cfi-advance-loc2.s | 1 + llvm/test/MC/ELF/cfi-def-cfa-offset.s | 1 + llvm/test/MC/ELF/cfi-def-cfa-register.s | 1 + llvm/test/MC/ELF/cfi-def-cfa.s | 1 + llvm/test/MC/ELF/cfi-escape.s | 1 + llvm/test/MC/ELF/cfi-offset.s | 1 + llvm/test/MC/ELF/cfi-register.s | 1 + llvm/test/MC/ELF/cfi-rel-offset.s | 1 + llvm/test/MC/ELF/cfi-rel-offset2.s | 1 + llvm/test/MC/ELF/cfi-remember.s | 1 + llvm/test/MC/ELF/cfi-restore.s | 1 + llvm/test/MC/ELF/cfi-same-value.s | 1 + llvm/test/MC/ELF/cfi-undefined.s | 1 + llvm/test/MC/ELF/cfi-window-save.s | 1 + llvm/test/MC/ELF/cfi-zero-addr-delta.s | 1 + llvm/test/MC/ELF/cfi.s | 1 + llvm/test/MC/ELF/cgprofile.s | 3 ++- llvm/test/MC/ELF/relocation-pc.s | 1 + llvm/test/MC/ELF/rename.s | 3 ++- llvm/test/MC/PowerPC/ppc64-initial-cfa.s | 6 ++++-- 23 files changed, 28 insertions(+), 5 deletions(-) diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index e0ea446..410d996 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -796,7 +796,7 @@ MCSectionELF *ELFWriter::createRelocationSection(MCContext &Ctx, else EntrySize = is64Bit() ? sizeof(ELF::Elf64_Rel) : sizeof(ELF::Elf32_Rel); - unsigned Flags = 0; + unsigned Flags = ELF::SHF_INFO_LINK; if (Sec.getFlags() & ELF::SHF_GROUP) Flags = ELF::SHF_GROUP; diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/SystemZ/cfi-relo-pc64.s b/llvm/test/ExecutionEngine/RuntimeDyld/SystemZ/cfi-relo-pc64.s index 166d46e..29bc6ce 100644 --- a/llvm/test/ExecutionEngine/RuntimeDyld/SystemZ/cfi-relo-pc64.s +++ b/llvm/test/ExecutionEngine/RuntimeDyld/SystemZ/cfi-relo-pc64.s @@ -18,6 +18,7 @@ f1: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s b/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s index e34fc5d..1ea60b1 100644 --- a/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s +++ b/llvm/test/MC/ELF/cfi-adjust-cfa-offset.s @@ -55,6 +55,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-advance-loc2.s b/llvm/test/MC/ELF/cfi-advance-loc2.s index 9226200..2e9fa59 100644 --- a/llvm/test/MC/ELF/cfi-advance-loc2.s +++ b/llvm/test/MC/ELF/cfi-advance-loc2.s @@ -36,6 +36,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-def-cfa-offset.s b/llvm/test/MC/ELF/cfi-def-cfa-offset.s index 2d788c1..58edcd4 100644 --- a/llvm/test/MC/ELF/cfi-def-cfa-offset.s +++ b/llvm/test/MC/ELF/cfi-def-cfa-offset.s @@ -38,6 +38,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-def-cfa-register.s b/llvm/test/MC/ELF/cfi-def-cfa-register.s index 53a77c3..a9e0e63 100644 --- a/llvm/test/MC/ELF/cfi-def-cfa-register.s +++ b/llvm/test/MC/ELF/cfi-def-cfa-register.s @@ -37,6 +37,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-def-cfa.s b/llvm/test/MC/ELF/cfi-def-cfa.s index 6003327..1f10063 100644 --- a/llvm/test/MC/ELF/cfi-def-cfa.s +++ b/llvm/test/MC/ELF/cfi-def-cfa.s @@ -33,6 +33,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-escape.s b/llvm/test/MC/ELF/cfi-escape.s index daedc52..84ab909 100644 --- a/llvm/test/MC/ELF/cfi-escape.s +++ b/llvm/test/MC/ELF/cfi-escape.s @@ -38,6 +38,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-offset.s b/llvm/test/MC/ELF/cfi-offset.s index efb8dbe..f538d50 100644 --- a/llvm/test/MC/ELF/cfi-offset.s +++ b/llvm/test/MC/ELF/cfi-offset.s @@ -33,6 +33,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-register.s b/llvm/test/MC/ELF/cfi-register.s index 20a3f44..fadb46e 100644 --- a/llvm/test/MC/ELF/cfi-register.s +++ b/llvm/test/MC/ELF/cfi-register.s @@ -38,6 +38,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-rel-offset.s b/llvm/test/MC/ELF/cfi-rel-offset.s index 71d8d7c..0454942 100644 --- a/llvm/test/MC/ELF/cfi-rel-offset.s +++ b/llvm/test/MC/ELF/cfi-rel-offset.s @@ -48,6 +48,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-rel-offset2.s b/llvm/test/MC/ELF/cfi-rel-offset2.s index d590911..4863b07 100644 --- a/llvm/test/MC/ELF/cfi-rel-offset2.s +++ b/llvm/test/MC/ELF/cfi-rel-offset2.s @@ -33,6 +33,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-remember.s b/llvm/test/MC/ELF/cfi-remember.s index ffafe78..c7e9a5c 100644 --- a/llvm/test/MC/ELF/cfi-remember.s +++ b/llvm/test/MC/ELF/cfi-remember.s @@ -40,6 +40,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-restore.s b/llvm/test/MC/ELF/cfi-restore.s index bbf339f..71ac1f0 100644 --- a/llvm/test/MC/ELF/cfi-restore.s +++ b/llvm/test/MC/ELF/cfi-restore.s @@ -34,6 +34,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-same-value.s b/llvm/test/MC/ELF/cfi-same-value.s index 80afaa0..9ee4b37 100644 --- a/llvm/test/MC/ELF/cfi-same-value.s +++ b/llvm/test/MC/ELF/cfi-same-value.s @@ -38,6 +38,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-undefined.s b/llvm/test/MC/ELF/cfi-undefined.s index 32ae2b1..de7f29f 100644 --- a/llvm/test/MC/ELF/cfi-undefined.s +++ b/llvm/test/MC/ELF/cfi-undefined.s @@ -38,6 +38,7 @@ f: // CHECK-NEXT: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-window-save.s b/llvm/test/MC/ELF/cfi-window-save.s index 8c9db94..df70734 100644 --- a/llvm/test/MC/ELF/cfi-window-save.s +++ b/llvm/test/MC/ELF/cfi-window-save.s @@ -40,6 +40,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi-zero-addr-delta.s b/llvm/test/MC/ELF/cfi-zero-addr-delta.s index 0941105..b53e75e 100644 --- a/llvm/test/MC/ELF/cfi-zero-addr-delta.s +++ b/llvm/test/MC/ELF/cfi-zero-addr-delta.s @@ -41,6 +41,7 @@ f: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cfi.s b/llvm/test/MC/ELF/cfi.s index a30ee1b..d347cc6 100644 --- a/llvm/test/MC/ELF/cfi.s +++ b/llvm/test/MC/ELF/cfi.s @@ -358,6 +358,7 @@ f37: // CHECK: Name: .rela.eh_frame // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/cgprofile.s b/llvm/test/MC/ELF/cgprofile.s index 26f60bc..f8469dd 100644 --- a/llvm/test/MC/ELF/cgprofile.s +++ b/llvm/test/MC/ELF/cgprofile.s @@ -33,7 +33,8 @@ late3: # CHECK: Name: .rel.llvm.call-graph-profile (28) # CHECK-NEXT: Type: SHT_REL (0x9) -# CHECK-NEXT: Flags [ (0x0) +# CHECK-NEXT: Flags [ (0x40) +# CHECK-NEXT: SHF_INFO_LINK # CHECK-NEXT: ] # CHECK-NEXT: Address: 0x0 # CHECK-NEXT: Offset: 0x140 diff --git a/llvm/test/MC/ELF/relocation-pc.s b/llvm/test/MC/ELF/relocation-pc.s index a74a438..8202adb 100644 --- a/llvm/test/MC/ELF/relocation-pc.s +++ b/llvm/test/MC/ELF/relocation-pc.s @@ -11,6 +11,7 @@ // CHECK: Name: .rela.text // CHECK-NEXT: Type: SHT_RELA // CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/ELF/rename.s b/llvm/test/MC/ELF/rename.s index c5351a0b..9a33681 100644 --- a/llvm/test/MC/ELF/rename.s +++ b/llvm/test/MC/ELF/rename.s @@ -19,7 +19,8 @@ defined3: // CHECK: Index: // CHECK: Name: .rela.text // CHECK-NEXT: Type: SHT_RELA (0x4) -// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_INFO_LINK // CHECK-NEXT: ] // CHECK-NEXT: Address: 0x0 // CHECK-NEXT: Offset: diff --git a/llvm/test/MC/PowerPC/ppc64-initial-cfa.s b/llvm/test/MC/PowerPC/ppc64-initial-cfa.s index e7be1f5..627f1d4 100644 --- a/llvm/test/MC/PowerPC/ppc64-initial-cfa.s +++ b/llvm/test/MC/PowerPC/ppc64-initial-cfa.s @@ -40,7 +40,8 @@ _proc: # STATIC: Section { # STATIC: Name: .rela.eh_frame # STATIC-NEXT: Type: SHT_RELA -# STATIC-NEXT: Flags [ (0x0) +# STATIC-NEXT: Flags [ +# STATIC-NEXT: SHF_INFO_LINK # STATIC-NEXT: ] # STATIC-NEXT: Address: # STATIC-NEXT: Offset: @@ -81,7 +82,8 @@ _proc: # PIC: Section { # PIC: Name: .rela.eh_frame # PIC-NEXT: Type: SHT_RELA -# PIC-NEXT: Flags [ (0x0) +# PIC-NEXT: Flags [ +# PIC-NEXT: SHF_INFO_LINK # PIC-NEXT: ] # PIC-NEXT: Address: # PIC-NEXT: Offset: -- 2.7.4