[lld] [lld][AArch64] Fix handling of SHT_REL relocation addends. (PR #98291)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 15 10:50:33 PDT 2024
================
@@ -1,97 +1,318 @@
-## Test certain REL relocation types generated by legacy armasm.
-# RUN: yaml2obj %s -o %t.o
-# RUN: ld.lld %t.o -o %t
-# RUN: llvm-objdump -s %t | FileCheck %s
-
-# CHECK: Contents of section .abs:
-# CHECK-NEXT: [[#%x,]] 29002800 00002700 00000000 0000fcff ).(...'.........
-# CHECK-NEXT: [[#%x,]] ffffffff ffff ......
-# CHECK-NEXT: Contents of section .uabs:
-# CHECK-NEXT: [[#%x,]] 40ffffff 40ffffff 20ffffff 20ffffff @... at ... ... ...
-# CHECK-NEXT: [[#%x,]] 00ffffff 00ffffff ........
-# CHECK-NEXT: Contents of section .prel:
-# CHECK-NEXT: [[#%x,]] 00ffffff fcfeffff f8feffff a0ffffff ................
-# CHECK-NEXT: [[#%x,]] 0010009f 0010009f ........
-# CHECK-NEXT: Contents of section .branch:
-# CHECK-NEXT: [[#%x,]] f0ffffff f0ffffff fdffffff fcffff14 ................
-
----
-!ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-Sections:
- - Name: .abs
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- Content: fffffefffffffdfffffffffffffffcffffffffffffff
- - Name: .rel.abs
- Type: SHT_REL
- Link: .symtab
- Info: .abs
- Relocations:
- - {Offset: 0, Symbol: abs, Type: R_AARCH64_ABS16}
- - {Offset: 2, Symbol: abs, Type: R_AARCH64_ABS32}
- - {Offset: 6, Symbol: abs, Type: R_AARCH64_ABS64}
- - {Offset: 14, Symbol: abs, Type: R_AARCH64_ADD_ABS_LO12_NC}
-
- - Name: .uabs
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 4
- Content: 00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
- - Name: .rel.uabs
- Type: SHT_REL
- Link: .symtab
- Info: .uabs
- Relocations:
- - {Offset: 0, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G0}
- - {Offset: 4, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G0_NC}
- - {Offset: 8, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G1}
- - {Offset: 12, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G1_NC}
- - {Offset: 16, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G2}
- - {Offset: 20, Symbol: abs, Type: R_AARCH64_MOVW_UABS_G2_NC}
-
- - Name: .prel
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 4
- Content: 00ffffff00ffffff00ffffff00ffffff00ffffff00ffffff
- - Name: .rel.prel
- Type: SHT_REL
- Link: .symtab
- Info: .prel
- Relocations:
- - {Offset: 0, Symbol: .prel, Type: R_AARCH64_PREL64}
- - {Offset: 4, Symbol: .prel, Type: R_AARCH64_PREL32}
- - {Offset: 8, Symbol: .prel, Type: R_AARCH64_PREL16}
- - {Offset: 12, Symbol: .prel, Type: R_AARCH64_LD_PREL_LO19}
- - {Offset: 16, Symbol: .prel, Type: R_AARCH64_ADR_PREL_PG_HI21}
- - {Offset: 20, Symbol: .prel, Type: R_AARCH64_ADR_PREL_PG_HI21_NC}
-
- - Name: .branch
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 4
- Content: f0fffffff0fffffff0fffffff0ffffff
- - Name: .rel.branch
- Type: SHT_REL
- Link: .symtab
- Info: .branch
- Relocations:
- - {Offset: 0, Symbol: .branch, Type: R_AARCH64_TSTBR14}
- - {Offset: 4, Symbol: .branch, Type: R_AARCH64_CONDBR19}
- - {Offset: 8, Symbol: .branch, Type: R_AARCH64_CALL26}
- - {Offset: 12, Symbol: .branch, Type: R_AARCH64_JUMP26}
-
-Symbols:
- - Name: .branch
- Section: .branch
- - Name: .prel
- Section: .prel
- - Name: abs
- Index: SHN_ABS
- Value: 42
- Binding: STB_GLOBAL
+REQUIRES: aarch64
+
+## Test handling of addends taken from the relocated word or instruction
+## in AArch64 relocation sections of type SHT_REL. These can be generated
+## by assemblers other than LLVM, in particular the legacy 'armasm'.
+##
+## llvm-mc will only generate SHT_RELA when targeting AArch64. So to make
+## an input file with SHT_REL, we assemble our test source file, then
+## round-trip via YAML and do some seddery to change the type of the
+## relocation section. Since all the relocations were made manually with
+## .reloc directives containing no addend, this succeeds.
+
+# RUN: rm -rf %t
----------------
MaskRay wrote:
Many newer tests use `rm -rf %t && split-file %s %t && cd %t` so that you can eliminate `%t/` (sometimes error-prone) below.
https://github.com/llvm/llvm-project/pull/98291
More information about the llvm-commits
mailing list