335 lines · plain
1// REQUIRES: arm, aarch642 3// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %p/Inputs/arm-shared.s -o %t.a32.so.o4// RUN: ld.lld -shared %t.a32.so.o -soname=so -o %t.a32.so5// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.a32.o6// RUN: ld.lld -pie --pack-dyn-relocs=none %t.a32.o %t.a32.so -o %t2.a327// RUN: llvm-readobj -r %t2.a32 | FileCheck --check-prefix=UNPACKED32 %s8 9// RUN: not ld.lld --pack-dyn-relocs=invalid %t.a32.o %t.a32.so -o /dev/null 2>&1 | FileCheck %s --check-prefix=UNKNOWN10 11// UNKNOWN: unknown --pack-dyn-relocs format: invalid12 13/// Unpacked should have the relative relocations in their natural order.14/// UNPACKED32: Section ({{.+}}) .rel.dyn {15// UNPACKED32-NEXT: 0x30324 R_ARM_RELATIVE -16// UNPACKED32-NEXT: 0x30328 R_ARM_RELATIVE -17// UNPACKED32-NEXT: 0x3032C R_ARM_RELATIVE -18// UNPACKED32-NEXT: 0x30330 R_ARM_RELATIVE -19// UNPACKED32-NEXT: 0x30334 R_ARM_RELATIVE -20// UNPACKED32-NEXT: 0x30338 R_ARM_RELATIVE -21// UNPACKED32-NEXT: 0x3033C R_ARM_RELATIVE -22// UNPACKED32-NEXT: 0x30340 R_ARM_RELATIVE -23 24// UNPACKED32-NEXT: 0x30348 R_ARM_RELATIVE -25// UNPACKED32-NEXT: 0x3034C R_ARM_RELATIVE -26// UNPACKED32-NEXT: 0x30350 R_ARM_RELATIVE -27// UNPACKED32-NEXT: 0x30354 R_ARM_RELATIVE -28// UNPACKED32-NEXT: 0x30358 R_ARM_RELATIVE -29// UNPACKED32-NEXT: 0x3035C R_ARM_RELATIVE -30// UNPACKED32-NEXT: 0x30360 R_ARM_RELATIVE -31 32// UNPACKED32-NEXT: 0x3036C R_ARM_RELATIVE -33// UNPACKED32-NEXT: 0x30370 R_ARM_RELATIVE -34// UNPACKED32-NEXT: 0x30374 R_ARM_RELATIVE -35// UNPACKED32-NEXT: 0x30378 R_ARM_RELATIVE -36// UNPACKED32-NEXT: 0x3037C R_ARM_RELATIVE -37// UNPACKED32-NEXT: 0x30380 R_ARM_RELATIVE -38// UNPACKED32-NEXT: 0x30384 R_ARM_RELATIVE -39// UNPACKED32-NEXT: 0x30388 R_ARM_RELATIVE -40// UNPACKED32-NEXT: 0x3038C R_ARM_RELATIVE -41// UNPACKED32-NEXT: 0x30391 R_ARM_RELATIVE -42 43// UNPACKED32-NEXT: 0x30344 R_ARM_ABS32 bar244// UNPACKED32-NEXT: 0x30368 R_ARM_ABS32 bar245// UNPACKED32-NEXT: 0x30395 R_ARM_ABS32 bar246// UNPACKED32-NEXT: 0x30399 R_ARM_ABS32 bar247// UNPACKED32-NEXT: 0x3039D R_ARM_ABS32 bar248// UNPACKED32-NEXT: 0x303A1 R_ARM_ABS32 bar249// UNPACKED32-NEXT: 0x303A5 R_ARM_ABS32 bar250// UNPACKED32-NEXT: 0x30364 R_ARM_ABS32 zed251// UNPACKED32-NEXT: }52 53// RUN: ld.lld -pie --pack-dyn-relocs=android %t.a32.o %t.a32.so -o %t3.a3254// RUN: llvm-readobj -S --dynamic-table %t3.a32 | FileCheck --check-prefix=ANDROID32-HEADERS %s55// RUN: llvm-readobj -r %t3.a32 | FileCheck --check-prefix=ANDROID32 %s56 57// ANDROID32-HEADERS: Index: 158// ANDROID32-HEADERS-NEXT: Name: .dynsym59 60// ANDROID32-HEADERS: Name: .rel.dyn61// ANDROID32-HEADERS-NEXT: Type: SHT_ANDROID_REL62// ANDROID32-HEADERS-NEXT: Flags [ (0x2)63// ANDROID32-HEADERS-NEXT: SHF_ALLOC (0x2)64// ANDROID32-HEADERS-NEXT: ]65// ANDROID32-HEADERS-NEXT: Address: [[ADDR:.*]]66// ANDROID32-HEADERS-NEXT: Offset: [[ADDR]]67// ANDROID32-HEADERS-NEXT: Size: [[SIZE:.*]]68// ANDROID32-HEADERS-NEXT: Link: 169// ANDROID32-HEADERS-NEXT: Info: 070// ANDROID32-HEADERS-NEXT: AddressAlignment: 471// ANDROID32-HEADERS-NEXT: EntrySize: 172 73// ANDROID32-HEADERS: 0x6000000F ANDROID_REL [[ADDR]]74// ANDROID32-HEADERS: 0x60000010 ANDROID_RELSZ [[SIZE]]75 76/// Packed should have the groups of non-relative relocations first, followed77/// by the larger groups of relative relocations (i.e. the 8 and 9 followed78/// by the 7.)79// ANDROID32: Section ({{.+}}) .rel.dyn {80// ANDROID32-NEXT: 0x3024C R_ARM_RELATIVE -81// ANDROID32-NEXT: 0x30250 R_ARM_RELATIVE -82// ANDROID32-NEXT: 0x30254 R_ARM_RELATIVE -83// ANDROID32-NEXT: 0x30258 R_ARM_RELATIVE -84// ANDROID32-NEXT: 0x3025C R_ARM_RELATIVE -85// ANDROID32-NEXT: 0x30260 R_ARM_RELATIVE -86// ANDROID32-NEXT: 0x30264 R_ARM_RELATIVE -87// ANDROID32-NEXT: 0x30268 R_ARM_RELATIVE -88 89// ANDROID32-NEXT: 0x30294 R_ARM_RELATIVE -90// ANDROID32-NEXT: 0x30298 R_ARM_RELATIVE -91// ANDROID32-NEXT: 0x3029C R_ARM_RELATIVE -92// ANDROID32-NEXT: 0x302A0 R_ARM_RELATIVE -93// ANDROID32-NEXT: 0x302A4 R_ARM_RELATIVE -94// ANDROID32-NEXT: 0x302A8 R_ARM_RELATIVE -95// ANDROID32-NEXT: 0x302AC R_ARM_RELATIVE -96// ANDROID32-NEXT: 0x302B0 R_ARM_RELATIVE -97// ANDROID32-NEXT: 0x302B4 R_ARM_RELATIVE -98 99// ANDROID32-NEXT: 0x30270 R_ARM_RELATIVE -100// ANDROID32-NEXT: 0x30274 R_ARM_RELATIVE -101// ANDROID32-NEXT: 0x30278 R_ARM_RELATIVE -102// ANDROID32-NEXT: 0x3027C R_ARM_RELATIVE -103// ANDROID32-NEXT: 0x30280 R_ARM_RELATIVE -104// ANDROID32-NEXT: 0x30284 R_ARM_RELATIVE -105// ANDROID32-NEXT: 0x30288 R_ARM_RELATIVE -106 107// ANDROID32-NEXT: 0x302B9 R_ARM_RELATIVE -108 109// ANDROID32-NEXT: 0x3026C R_ARM_ABS32 bar2110// ANDROID32-NEXT: 0x30290 R_ARM_ABS32 bar2111// ANDROID32-NEXT: 0x302BD R_ARM_ABS32 bar2112// ANDROID32-NEXT: 0x302C1 R_ARM_ABS32 bar2113// ANDROID32-NEXT: 0x302C5 R_ARM_ABS32 bar2114// ANDROID32-NEXT: 0x302C9 R_ARM_ABS32 bar2115// ANDROID32-NEXT: 0x302CD R_ARM_ABS32 bar2116// ANDROID32-NEXT: 0x3028C R_ARM_ABS32 zed2117// ANDROID32-NEXT: }118 119// RUN: ld.lld -pie --pack-dyn-relocs=relr %t.a32.o %t.a32.so -o %t4.a32120// RUN: llvm-readelf -Sdr %t4.a32 | FileCheck --check-prefix=RELR32 %s121 122// RELR32: Name Type Address Off Size ES Flg Lk Inf Al123// RELR32: .dynstr STRTAB {{.*}} 00 A 0 0 1124// RELR32-NEXT: .rel.dyn REL {{.*}} 08 A 1 0 4125// RELR32-NEXT: .relr.dyn RELR {{0*}}[[#%x,RELR:]] {{.*}} 04 A 0 0 4126 127// RELR32: (RELCOUNT) 1128// RELR32: (RELR) 0x[[#RELR]]129// RELR32-NEXT: (RELRSZ) 8 (bytes)130// RELR32-NEXT: (RELRENT) 4 (bytes)131 132// RELR32: Relocation section '.relr.dyn' at offset {{.*}} contains 24 entries:133// RELR32-NEXT: Index: Entry Address Symbolic Address134// RELR32-NEXT: 0000: 00030284 {{.*}}135// RELR32-NEXT: 0001: 07fcfeff {{.*}}136 137// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %p/Inputs/shared2.s -o %t.a64.so.o138// RUN: ld.lld -shared %t.a64.so.o -soname=so -o %t.a64.so139// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %t.a64.o140// RUN: ld.lld -pie --pack-dyn-relocs=none %t.a64.o %t.a64.so -o %t2.a64141// RUN: llvm-readobj -r %t2.a64 | FileCheck --check-prefix=UNPACKED64 %s142 143// UNPACKED64: Section ({{.+}}) .rela.dyn {144// UNPACKED64-NEXT: 0x30690 R_AARCH64_RELATIVE - 0x30690145// UNPACKED64-NEXT: 0x30698 R_AARCH64_RELATIVE - 0x30691146// UNPACKED64-NEXT: 0x306A0 R_AARCH64_RELATIVE - 0x2147// UNPACKED64-NEXT: 0x306A8 R_AARCH64_RELATIVE - 0xFFFFFFFFFFFFFFFF148// UNPACKED64-NEXT: 0x306B0 R_AARCH64_RELATIVE - 0x80000000149// UNPACKED64-NEXT: 0x306B8 R_AARCH64_RELATIVE - 0x6150// UNPACKED64-NEXT: 0x306C0 R_AARCH64_RELATIVE - 0x7151// UNPACKED64-NEXT: 0x306C8 R_AARCH64_RELATIVE - 0x30698152 153// UNPACKED64-NEXT: 0x306D8 R_AARCH64_RELATIVE - 0x30691154// UNPACKED64-NEXT: 0x306E0 R_AARCH64_RELATIVE - 0x2155// UNPACKED64-NEXT: 0x306E8 R_AARCH64_RELATIVE - 0x3156// UNPACKED64-NEXT: 0x306F0 R_AARCH64_RELATIVE - 0x4157// UNPACKED64-NEXT: 0x306F8 R_AARCH64_RELATIVE - 0x5158// UNPACKED64-NEXT: 0x30700 R_AARCH64_RELATIVE - 0x6159// UNPACKED64-NEXT: 0x30708 R_AARCH64_RELATIVE - 0x30697160 161// UNPACKED64-NEXT: 0x30720 R_AARCH64_RELATIVE - 0x30691162// UNPACKED64-NEXT: 0x30728 R_AARCH64_RELATIVE - 0x2163// UNPACKED64-NEXT: 0x30730 R_AARCH64_RELATIVE - 0x3164// UNPACKED64-NEXT: 0x30738 R_AARCH64_RELATIVE - 0x4165// UNPACKED64-NEXT: 0x30740 R_AARCH64_RELATIVE - 0x5166// UNPACKED64-NEXT: 0x30748 R_AARCH64_RELATIVE - 0x6167// UNPACKED64-NEXT: 0x30750 R_AARCH64_RELATIVE - 0x7168// UNPACKED64-NEXT: 0x30758 R_AARCH64_RELATIVE - 0x8169// UNPACKED64-NEXT: 0x30760 R_AARCH64_RELATIVE - 0x30699170 171// UNPACKED64-NEXT: 0x30769 R_AARCH64_RELATIVE - 0x3069A172 173// UNPACKED64-NEXT: 0x306D0 R_AARCH64_ABS64 bar2 0x1174// UNPACKED64-NEXT: 0x30718 R_AARCH64_ABS64 bar2 0x0175// UNPACKED64-NEXT: 0x30771 R_AARCH64_ABS64 bar2 0x0176// UNPACKED64-NEXT: 0x30779 R_AARCH64_ABS64 bar2 0x0177// UNPACKED64-NEXT: 0x30781 R_AARCH64_ABS64 bar2 0x1178// UNPACKED64-NEXT: 0x30789 R_AARCH64_ABS64 bar2 0x1179// UNPACKED64-NEXT: 0x30791 R_AARCH64_ABS64 bar2 0x0180// UNPACKED64-NEXT: 0x30710 R_AARCH64_ABS64 zed2 0x0181// UNPACKED64-NEXT: }182 183// RUN: ld.lld -pie --pack-dyn-relocs=android %t.a64.o %t.a64.so -o %t3.a64184// RUN: llvm-readelf -S -d -r %t3.a64 | FileCheck --check-prefix=ANDROID64 %s185 186// ANDROID64: Name Type Address Off Size ES Flg Lk Inf Al187// ANDROID64: .dynstr STRTAB {{.*}} 00 A 0 0 1188// ANDROID64-NEXT: .rela.dyn ANDROID_RELA {{0*}}[[#%x,ANDROID:]] {{.*}} 01 A 1 0 8189// ANDROID64-NEXT: .text PROGBITS {{.*}} 00 AX 0 0 4190 191// ANDROID64: (DEBUG) 0x0192// ANDROID64-NEXT: (ANDROID_RELA) 0x[[#ANDROID]]193// ANDROID64-NEXT: (ANDROID_RELASZ) 136 (bytes)194// ANDROID64-NEXT: (RELAENT) 24 (bytes)195 196// ANDROID64-HEADERS: 0x0000000060000011 ANDROID_RELA [[ADDR]]197// ANDROID64-HEADERS: 0x0000000060000012 ANDROID_RELASZ [[SIZE]]198 199// ANDROID64: Relocation section '.rela.dyn' at offset {{.*}} contains 33 entries:200// ANDROID64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend201// ANDROID64-NEXT: 00000000000303f0 0000000000000403 R_AARCH64_RELATIVE 303f0202// ANDROID64-NEXT: 00000000000303f8 0000000000000403 R_AARCH64_RELATIVE 303f1203// ANDROID64-NEXT: 0000000000030400 0000000000000403 R_AARCH64_RELATIVE 2204// ANDROID64-NEXT: 0000000000030408 0000000000000403 R_AARCH64_RELATIVE ffffffffffffffff205// ANDROID64-NEXT: 0000000000030410 0000000000000403 R_AARCH64_RELATIVE 80000000206// ANDROID64-NEXT: 0000000000030418 0000000000000403 R_AARCH64_RELATIVE 6207// ANDROID64-NEXT: 0000000000030420 0000000000000403 R_AARCH64_RELATIVE 7208// ANDROID64-NEXT: 0000000000030428 0000000000000403 R_AARCH64_RELATIVE 303f8209// ANDROID64-NEXT: 0000000000030480 0000000000000403 R_AARCH64_RELATIVE 303f1210// ANDROID64-NEXT: 0000000000030488 0000000000000403 R_AARCH64_RELATIVE 2211// ANDROID64-NEXT: 0000000000030490 0000000000000403 R_AARCH64_RELATIVE 3212// ANDROID64-NEXT: 0000000000030498 0000000000000403 R_AARCH64_RELATIVE 4213// ANDROID64-NEXT: 00000000000304a0 0000000000000403 R_AARCH64_RELATIVE 5214// ANDROID64-NEXT: 00000000000304a8 0000000000000403 R_AARCH64_RELATIVE 6215// ANDROID64-NEXT: 00000000000304b0 0000000000000403 R_AARCH64_RELATIVE 7216// ANDROID64-NEXT: 00000000000304b8 0000000000000403 R_AARCH64_RELATIVE 8217// ANDROID64-NEXT: 00000000000304c0 0000000000000403 R_AARCH64_RELATIVE 303f9218// ANDROID64-NEXT: 0000000000030438 0000000000000403 R_AARCH64_RELATIVE 303f1219// ANDROID64-NEXT: 0000000000030440 0000000000000403 R_AARCH64_RELATIVE 2220// ANDROID64-NEXT: 0000000000030448 0000000000000403 R_AARCH64_RELATIVE 3221// ANDROID64-NEXT: 0000000000030450 0000000000000403 R_AARCH64_RELATIVE 4222// ANDROID64-NEXT: 0000000000030458 0000000000000403 R_AARCH64_RELATIVE 5223// ANDROID64-NEXT: 0000000000030460 0000000000000403 R_AARCH64_RELATIVE 6224// ANDROID64-NEXT: 0000000000030468 0000000000000403 R_AARCH64_RELATIVE 303f7225// ANDROID64-NEXT: 00000000000304c9 0000000000000403 R_AARCH64_RELATIVE 303fa226// ANDROID64-NEXT: 0000000000030478 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0227// ANDROID64-NEXT: 00000000000304d1 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0228// ANDROID64-NEXT: 00000000000304d9 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0229// ANDROID64-NEXT: 00000000000304f1 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0230// ANDROID64-NEXT: 0000000000030430 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1231// ANDROID64-NEXT: 0000000000030470 0000000200000101 R_AARCH64_ABS64 0000000000000000 zed2 + 0232// ANDROID64-NEXT: 00000000000304e1 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1233// ANDROID64-NEXT: 00000000000304e9 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1234// ANDROID64-EMPTY:235 236// RUN: ld.lld -pie --pack-dyn-relocs=relr %t.a64.o %t.a64.so -o %t4.a64237// RUN: llvm-readelf -Sdr -x .data %t4.a64 | FileCheck --check-prefix=RELR64 %s238 239// RELR64: Name Type Address Off Size ES Flg Lk Inf Al240// RELR64: .dynstr STRTAB {{.*}} 00 A 0 0 1241// RELR64-NEXT: .rela.dyn RELA {{.*}} 18 A 1 0 8242// RELR64-NEXT: .relr.dyn RELR {{0*}}[[#%x,RELR:]] {{.*}} 08 A 0 0 8243// RELR64-NEXT: .text PROGBITS 0000000000010380 000380 000000 00 AX 0 0 4244 245// RELR64: (RELACOUNT) 1246// RELR64: (RELR) 0x[[#RELR]]247// RELR64-NEXT: (RELRSZ) 16 (bytes)248// RELR64-NEXT: (RELRENT) 8 (bytes)249 250/// Decoded SHT_RELR section is same as UNPACKED,251/// but contains only the relative relocations.252/// Any relative relocations with odd offset stay in SHT_RELA.253// RELR64: Relocation section '.rela.dyn' at offset {{.*}} contains 9 entries:254// RELR64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend255// RELR64-NEXT: 0000000000030569 0000000000000403 R_AARCH64_RELATIVE 3049a256// RELR64-NEXT: 00000000000304d0 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1257// RELR64-NEXT: 0000000000030518 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0258// RELR64-NEXT: 0000000000030571 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0259// RELR64-NEXT: 0000000000030579 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0260// RELR64-NEXT: 0000000000030581 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1261// RELR64-NEXT: 0000000000030589 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 1262// RELR64-NEXT: 0000000000030591 0000000100000101 R_AARCH64_ABS64 0000000000000000 bar2 + 0263// RELR64-NEXT: 0000000000030510 0000000200000101 R_AARCH64_ABS64 0000000000000000 zed2 + 0264// RELR64-EMPTY: 265// RELR64-NEXT: Relocation section '.relr.dyn' at offset {{.*}} contains 24 entries:266// RELR64-NEXT: Symbolic Address267// RELR64-NEXT: $d{{$}}268// RELR64-NEXT: $d + 0x8269// RELR64-NEXT: $d + 0x10270// RELR64-NEXT: $d + 0x18271// RELR64-NEXT: $d + 0x20272// RELR64-NEXT: $d + 0x28273// RELR64-NEXT: $d + 0x30274// RELR64-NEXT: $d + 0x38275// RELR64-NEXT: $d + 0x48276// RELR64-NEXT: $d + 0x50277// RELR64-NEXT: $d + 0x58278// RELR64-NEXT: $d + 0x60279// RELR64-NEXT: $d + 0x68280// RELR64-NEXT: $d + 0x70281// RELR64-NEXT: $d + 0x78282// RELR64-NEXT: $d + 0x90283// RELR64-NEXT: $d + 0x98284// RELR64-NEXT: $d + 0xa0285// RELR64-NEXT: $d + 0xa8286// RELR64-NEXT: $d + 0xb0287// RELR64-NEXT: $d + 0xb8288// RELR64-NEXT: $d + 0xc0289// RELR64-NEXT: $d + 0xc8290// RELR64-NEXT: $d + 0xd0291// RELR64-EMPTY:292// RELR64-NEXT: Hex dump of section '.data':293// RELR64-NEXT: 0x00030490 90040300 00000000 91040300 00000000 .294// RELR64-NEXT: 0x000304a0 02000000 00000000 ffffffff ffffffff .295// RELR64-NEXT: 0x000304b0 00000080 00000000 06000000 00000000 .296 297.data298.balign 2299.dc.a .data300.dc.a .data + 1301.dc.a __ehdr_start + 2302.dc.a __ehdr_start - 1303.dc.a __ehdr_start + 0x80000000304.dc.a __ehdr_start + 6305.dc.a __ehdr_start + 7306.dc.a .data + 8307.dc.a bar2 + 1308 309.dc.a .data + 1310.dc.a __ehdr_start + 2311.dc.a __ehdr_start + 3312.dc.a __ehdr_start + 4313.dc.a __ehdr_start + 5314.dc.a __ehdr_start + 6315.dc.a .data + 7316.dc.a zed2317.dc.a bar2318 319.dc.a .data + 1320.dc.a __ehdr_start + 2321.dc.a __ehdr_start + 3322.dc.a __ehdr_start + 4323.dc.a __ehdr_start + 5324.dc.a __ehdr_start + 6325.dc.a __ehdr_start + 7326.dc.a __ehdr_start + 8327.dc.a .data + 9328.byte 00329.dc.a .data + 10330.dc.a bar2331.dc.a bar2332.dc.a bar2 + 1333.dc.a bar2 + 1334.dc.a bar2335