211 lines · plain
1# REQUIRES: aarch642 3# RUN: rm -rf %t && split-file %s %t && cd %t4 5# RUN: llvm-mc -filetype=obj -triple=aarch64 %p/Inputs/shared2.s -o a.o6# RUN: ld.lld -shared a.o -soname=so -o a.so7# RUN: llvm-mc -filetype=obj -triple=aarch64 main.s -o main.o8 9# RUN: ld.lld -pie main.o a.so -o main10# RUN: llvm-readobj -r main | FileCheck --check-prefix=UNPACKED %s11 12# UNPACKED: Section ({{.+}}) .rela.dyn {13# UNPACKED-NEXT: 0x30470 R_AARCH64_AUTH_RELATIVE - 0x114# UNPACKED-NEXT: 0x30478 R_AARCH64_AUTH_RELATIVE - 0x3047215# UNPACKED-NEXT: 0x30480 R_AARCH64_AUTH_RELATIVE - 0xFFFFFFFFFFFFFFFD16# UNPACKED-NEXT: 0x30488 R_AARCH64_AUTH_RELATIVE - 0x1234567817# UNPACKED-NEXT: 0x30490 R_AARCH64_AUTH_RELATIVE - 0x123456789A18# UNPACKED-NEXT: 0x30498 R_AARCH64_AUTH_RELATIVE - 0xFFFFFFEDCBA9876619# UNPACKED-NEXT: 0x304A0 R_AARCH64_AUTH_RELATIVE - 0x8003046F20# UNPACKED-NEXT: 0x304B9 R_AARCH64_AUTH_RELATIVE - 0x421# UNPACKED-NEXT: 0x304C2 R_AARCH64_AUTH_RELATIVE - 0x3047522# UNPACKED-NEXT: 0x304A8 R_AARCH64_AUTH_ABS64 zed2 0x111123# UNPACKED-NEXT: 0x304B0 R_AARCH64_AUTH_ABS64 bar2 0x024# UNPACKED-NEXT: }25 26# RUN: ld.lld main.o a.so -o main.nopie27# RUN: llvm-readobj -r main.nopie | FileCheck --check-prefix=NOPIE %s28 29# NOPIE: Section ({{.+}}) .rela.dyn {30# NOPIE: 0x230460 R_AARCH64_AUTH_RELATIVE - 0x20000131# NOPIE-NEXT: 0x230468 R_AARCH64_AUTH_RELATIVE - 0x23046232# NOPIE-NEXT: 0x230470 R_AARCH64_AUTH_RELATIVE - 0x1FFFFD33# NOPIE-NEXT: 0x230478 R_AARCH64_AUTH_RELATIVE - 0x1254567834# NOPIE-NEXT: 0x230480 R_AARCH64_AUTH_RELATIVE - 0x123476789A35# NOPIE-NEXT: 0x230488 R_AARCH64_AUTH_RELATIVE - 0xFFFFFFEDCBC9876636# NOPIE-NEXT: 0x230490 R_AARCH64_AUTH_RELATIVE - 0x8023045F37# NOPIE-NEXT: 0x2304A9 R_AARCH64_AUTH_RELATIVE - 0x20000438# NOPIE-NEXT: 0x2304B2 R_AARCH64_AUTH_RELATIVE - 0x23046539# NOPIE-NEXT: 0x230498 R_AARCH64_AUTH_ABS64 zed2 0x111140# NOPIE-NEXT: 0x2304A0 R_AARCH64_AUTH_ABS64 bar2 0x041# NOPIE-NEXT: }42 43# RUN: ld.lld -pie -z pack-relative-relocs main.o a.so -o main.pie44# RUN: llvm-readelf -S -d -r -x .test main.pie | FileCheck --check-prefixes=RELR,HEX %s45 46# RELR: Section Headers:47# RELR-NEXT: Name Type Address Off Size ES Flg Lk Inf Al48# RELR: .rela.dyn RELA {{0*}}[[ADDR1:.+]] {{0*}}[[ADDR1]] 000090 18 A 1 0 849# RELR: .relr.auth.dyn AARCH64_AUTH_RELR {{0*}}[[ADDR2:.+]] {{0*}}[[ADDR2]] 000018 08 A 0 0 850 51# RELR: Dynamic section at offset {{.+}} contains 16 entries52# RELR: 0x0000000070000012 (AARCH64_AUTH_RELR) 0x[[ADDR2]]53# RELR-NEXT: 0x0000000070000011 (AARCH64_AUTH_RELRSZ) 24 (bytes)54# RELR-NEXT: 0x0000000070000013 (AARCH64_AUTH_RELRENT) 8 (bytes)55 56## Decoded SHT_RELR section is same as UNPACKED,57## but contains only the relative relocations.58## Any relative relocations with odd offset or value wider than 32 bits stay in SHT_RELA.59 60# RELR: Relocation section '.rela.dyn' at offset 0x[[ADDR1]] contains 6 entries:61# RELR-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend62# RELR-NEXT: 0000000000030460 0000000000000411 R_AARCH64_AUTH_RELATIVE 123456789a63# RELR-NEXT: 0000000000030468 0000000000000411 R_AARCH64_AUTH_RELATIVE ffffffedcba9876664# RELR-NEXT: 0000000000030470 0000000000000411 R_AARCH64_AUTH_RELATIVE 8003043f65# RELR-NEXT: 0000000000030489 0000000000000411 R_AARCH64_AUTH_RELATIVE 466# RELR-NEXT: 0000000000030478 0000000100000244 R_AARCH64_AUTH_ABS64 0000000000000000 zed2 + 111167# RELR-NEXT: 0000000000030480 0000000200000244 R_AARCH64_AUTH_ABS64 0000000000000000 bar2 + 068# RELR-EMPTY:69# RELR-NEXT: Relocation section '.relr.auth.dyn' at offset 0x[[ADDR2]] contains 5 entries:70# RELR-NEXT: Index: Entry Address Symbolic Address71# RELR-NEXT: 0000: 0000000000030440 0000000000030440 $d72# RELR-NEXT: 0001: 000000000000000f 0000000000030448 $d + 0x873# RELR-NEXT: 0000000000030450 $d + 0x1074# RELR-NEXT: 0000000000030458 $d + 0x1875# RELR-NEXT: 0002: 0000000000030492 0000000000030492 $d + 0x5276 77# HEX: Hex dump of section '.test':78# HEX-NEXT: 0x00030440 01000000 2a000020 42040300 2b00000079## ^^^^^^^^ Implicit val = 1 = __ehdr_start + 180## ^^^^ Discr = 4281## ^^ Key (bits 5..6) = DA82## ^^^^^^^^ Implicit val = 0x30442 = 0x30440 + 2 = .test + 283## ^^^^ Discr = 4384## ^^ Key (bits 5..6) = IA85# HEX-NEXT: 0x00030450 fdffffff 2c000080 78563412 2d00002086## ^^^^^^^^ Implicit val = -3 = __ehdr_start - 387## ^^^^ Discr = 4488## ^^ Key (bits 5..6) = IA89## ^^ Addr diversity (bit 7) = true90## ^^^^^^^^ Implicit val = 0x12345678 = __ehdr_start + 0x1234567891## ^^^^ Discr = 4592## ^^ Key (bits 5..6) = DA93# HEX-NEXT: 0x00030460 00000000 2e000020 00000000 2f00002094## ^^^^^^^^ No implicit val (rela reloc due val wider than 32 bits)95## ^^^^ Discr = 4696## ^^ Key (bits 5..6) = DA97## ^^^^^^^^ No implicit val (rela reloc due to val wider than 32 bits)98## ^^^^ Discr = 4799## ^^ Key (bits 5..6) = DA100# HEX-NEXT: 0x00030470 00000000 30000020 00000000 31000020101## ^^^^^^^^ No implicit val (rela reloc due val wider than 32 bits)102## ^^^^ Discr = 48103## ^^ Key (bits 5..6) = DA104## ^^^^^^^^ No implicit val (rela reloc due to a preemptible symbol)105## ^^^^ Discr = 49106## ^^ Key (bits 5..6) = DA107# HEX-NEXT: 0x00030480 00000000 32000000 77000000 00330000108## ^^^^^^^^ No implicit val (rela reloc due to a preemptible symbol)109## ^^^^ Discr = 50110## ^^ Key (bits 5..6) = IA111## ^^^^^^ ^^ No implicit val (rela reloc due to odd offset)112## ^^^^ Discr = 51113# HEX-NEXT: 0x00030490 20774504 03003400 0020{{\ }}114## ^^ Key (bits 5..6) = DA115## ^^^^ ^^^^ Implicit val = 0x30445 = 0x30440 + 5 = .test + 5116## ^^^^ Discr = 52117## ^^ Key (bits 5..6) = DA118 119#--- main.s120 121.section .test, "aw"122.p2align 3123.quad (__ehdr_start + 1)@AUTH(da,42)124.quad (.test + 2)@AUTH(ia,43)125.quad (__ehdr_start - 3)@AUTH(ia,44,addr)126.quad (__ehdr_start + 0x12345678)@AUTH(da,45)127## Addend wider than 32 bits, not enough room for storing implicitly, would go to rela128.quad (__ehdr_start + 0x123456789A)@AUTH(da,46)129## Negative addend wider than 32 bits, not enough room for storing implicitly, would go to rela130.quad (__ehdr_start - 0x123456789A)@AUTH(da,47)131## INT32_MAX plus non-zero .test is wider than 32 bits, not enough room for storing implicitly, would go to rela132.quad (.test + 0x7FFFFFFF)@AUTH(da,48)133.quad (zed2 + 0x1111)@AUTH(da,49)134.quad bar2@AUTH(ia,50)135.byte 0x77136.quad (__ehdr_start + 4)@AUTH(da,51)137.byte 0x77138.quad (.test + 5)@AUTH(da,52)139 140#--- empty-relr.s141 142## .relr.auth.dyn relocations that do not fit 32 bits are moved to .rela.dyn.143## In this case .relr.auth.dyn will be made empty, but144## removeUnusedSyntheticSections fails to remove the section.145 146# RUN: llvm-mc -filetype=obj -triple=aarch64 empty-relr.s -o empty-relr.o147# RUN: ld.lld -pie -z pack-relative-relocs empty-relr.o -o empty-relr148# RUN: llvm-readelf -S -d -r empty-relr | FileCheck --check-prefixes=EMPTY-RELR %s149 150# EMPTY-RELR: Section Headers:151# EMPTY-RELR-NEXT: Name Type Address Off Size ES Flg Lk Inf Al152# EMPTY-RELR: .rela.dyn RELA {{0*}}[[ADDR1:.+]] {{0*}}[[ADDR1]] 000018 18 A 0 0 8153# EMPTY-RELR: .relr.auth.dyn AARCH64_AUTH_RELR {{0*}}[[ADDR2:.+]] {{0*}}[[ADDR2]] 000000 08 A 0 0 8154 155# EMPTY-RELR: Dynamic section at offset {{.+}} contains 12 entries156# EMPTY-RELR-NOT: (AARCH64_AUTH_RELR)157# EMPTY-RELR-NOT: (AARCH64_AUTH_RELRSZ)158# EMPTY-RELR-NOT: (AARCH64_AUTH_RELRENT)159# EMPTY-RELR: 0x0000000000000007 (RELA) 0x[[ADDR1]]160# EMPTY-RELR-NEXT: 0x0000000000000008 (RELASZ) 24 (bytes)161# EMPTY-RELR-NEXT: 0x0000000000000009 (RELAENT) 24 (bytes)162 163# EMPTY-RELR: Relocation section '.rela.dyn' at offset {{.+}} contains 1 entries:164# EMPTY-RELR-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend165# EMPTY-RELR-NEXT: 0000000000030320 0000000000000411 R_AARCH64_AUTH_RELATIVE 8003031f166# EMPTY-RELR-EMPTY:167# EMPTY-RELR-NEXT: Relocation section '.relr.auth.dyn' at offset {{.+}} contains 0 entries:168# EMPTY-RELR-NEXT: Index: Entry Address Symbolic Address169 170.section .test, "aw"171.p2align 3172.quad (.test + 0x7FFFFFFF)@AUTH(da,42)173 174#--- empty-rela.s175 176## .relr.auth.dyn relocations that do not fit 32 bits are moved to .rela.dyn.177## If this scenario does not happen, .rela.dyn will remain empty,178## but removeUnusedSyntheticSections fails to remove the section.179 180# RUN: llvm-mc -filetype=obj -triple=aarch64 empty-rela.s -o empty-rela.o181# RUN: ld.lld -pie -z pack-relative-relocs empty-rela.o -o empty-rela182# RUN: llvm-readelf -S -d -r empty-rela | FileCheck --check-prefixes=EMPTY-RELA %s183# RUN: ld.lld -r -z pack-relative-relocs empty-rela.o -o empty-rela.ro184# RUN: llvm-readelf -S empty-rela.ro | FileCheck --check-prefixes=EMPTY-RELA-RO %s185 186# EMPTY-RELA: Section Headers:187# EMPTY-RELA-NEXT: Name Type Address Off Size ES Flg Lk Inf Al188# EMPTY-RELA: .rela.dyn RELA {{0*}}[[ADDR1:.+]] {{0*}}[[ADDR1]] 000000 18 A 0 0 8189# EMPTY-RELA: .relr.auth.dyn AARCH64_AUTH_RELR {{0*}}[[ADDR2:.+]] {{0*}}[[ADDR2]] 000008 08 A 0 0 8190 191# EMPTY-RELA: Dynamic section at offset {{.+}} contains 12 entries192# EMPTY-RELA-NOT: (RELR)193# EMPTY-RELA-NOT: (RELRSZ)194# EMPTY-RELA-NOT: (RELRENT)195# EMPTY-RELA: 0x0000000070000012 (AARCH64_AUTH_RELR) 0x[[ADDR2]]196# EMPTY-RELA-NEXT: 0x0000000070000011 (AARCH64_AUTH_RELRSZ) 8 (bytes)197# EMPTY-RELA-NEXT: 0x0000000070000013 (AARCH64_AUTH_RELRENT) 8 (bytes)198 199# EMPTY-RELA: Relocation section '.rela.dyn' at offset {{.+}} contains 0 entries:200# EMPTY-RELA-NEXT: Offset Info Type Symbol's Value Symbol's Name201# EMPTY-RELA-EMPTY:202# EMPTY-RELA-NEXT: Relocation section '.relr.auth.dyn' at offset {{.+}} contains 1 entries:203# EMPTY-RELA-NEXT: Index: Entry Address Symbolic Address204# EMPTY-RELA-NEXT: 0000: 0000000000030310 0000000000030310 $d205 206# EMPTY-RELA-RO-NOT: .rela.dyn207 208.section .test, "aw"209.p2align 3210.quad (.test + 0x12345678)@AUTH(da,42)211