| # REQUIRES: aarch64 |
| |
| # RUN: rm -rf %t && split-file %s %t && cd %t |
| |
| # RUN: llvm-mc -filetype=obj -triple=aarch64 %p/Inputs/shared.s -o a.o |
| # RUN: ld.lld -shared a.o -o a.so |
| |
| #--- ok.s |
| # RUN: llvm-mc -filetype=obj -triple=aarch64 ok.s -o ok.o |
| |
| # RUN: ld.lld ok.o a.so -pie -o ok1 |
| # RUN: llvm-readelf -r -S -x .got ok1 | FileCheck %s --check-prefix=OK1 |
| |
| # RUN: ld.lld ok.o a.o -pie -o ok2 |
| # RUN: llvm-readelf -r -S -x .got -s ok2 | FileCheck %s --check-prefix=OK2 |
| |
| # OK1: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # OK1-NEXT: 0000000000020380 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 |
| # OK1-NEXT: 0000000000020388 0000000200000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 |
| |
| ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s) |
| # OK2: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # OK2-NEXT: 0000000000020320 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 |
| # OK2-NEXT: 0000000000020328 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 |
| |
| # OK1: Hex dump of section '.got': |
| # OK1-NEXT: 0x00020380 00000000 00000080 00000000 000000a0 |
| ## ^^ |
| ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA |
| ## ^^ |
| ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA |
| |
| # OK2: Symbol table '.symtab' contains {{.*}} entries: |
| # OK2: Num: Value Size Type Bind Vis Ndx Name |
| # OK2: 0000000000010260 0 FUNC GLOBAL DEFAULT 6 bar |
| # OK2: 0000000000010260 0 NOTYPE GLOBAL DEFAULT 6 zed |
| |
| # OK2: Hex dump of section '.got': |
| # OK2-NEXT: 0x00020320 00000000 00000080 00000000 000000a0 |
| ## ^^ |
| ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA |
| ## ^^ |
| ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA |
| |
| # RUN: llvm-objdump -d ok1 | FileCheck %s --check-prefix=OK1-ASM |
| |
| # OK1-ASM: <_start>: |
| # OK1-ASM-NEXT: adrp x0, 0x20000 |
| # OK1-ASM-NEXT: ldr x0, [x0, #0x380] |
| # OK1-ASM-NEXT: adrp x1, 0x20000 |
| # OK1-ASM-NEXT: add x1, x1, #0x380 |
| # OK1-ASM-NEXT: adrp x0, 0x20000 |
| # OK1-ASM-NEXT: ldr x0, [x0, #0x388] |
| # OK1-ASM-NEXT: adrp x1, 0x20000 |
| # OK1-ASM-NEXT: add x1, x1, #0x388 |
| |
| # RUN: llvm-objdump -d ok2 | FileCheck %s --check-prefix=OK2-ASM |
| |
| # OK2-ASM: <_start>: |
| # OK2-ASM-NEXT: adrp x0, 0x20000 |
| # OK2-ASM-NEXT: ldr x0, [x0, #0x320] |
| # OK2-ASM-NEXT: adrp x1, 0x20000 |
| # OK2-ASM-NEXT: add x1, x1, #0x320 |
| # OK2-ASM-NEXT: adrp x0, 0x20000 |
| # OK2-ASM-NEXT: ldr x0, [x0, #0x328] |
| # OK2-ASM-NEXT: adrp x1, 0x20000 |
| # OK2-ASM-NEXT: add x1, x1, #0x328 |
| |
| .globl _start |
| _start: |
| adrp x0, :got_auth:bar |
| ldr x0, [x0, :got_auth_lo12:bar] |
| adrp x1, :got_auth:bar |
| add x1, x1, :got_auth_lo12:bar |
| adrp x0, :got_auth:zed |
| ldr x0, [x0, :got_auth_lo12:zed] |
| adrp x1, :got_auth:zed |
| add x1, x1, :got_auth_lo12:zed |
| |
| #--- ok-tiny.s |
| # RUN: llvm-mc -filetype=obj -triple=aarch64 ok-tiny.s -o ok-tiny.o |
| |
| # RUN: ld.lld ok-tiny.o a.so -pie -o tiny1 |
| # RUN: llvm-readelf -r -S -x .got tiny1 | FileCheck %s --check-prefix=TINY1 |
| |
| # RUN: ld.lld ok-tiny.o a.o -pie -o tiny2 |
| # RUN: llvm-readelf -r -S -x .got -s tiny2 | FileCheck %s --check-prefix=TINY2 |
| |
| # TINY1: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # TINY1-NEXT: 0000000000020368 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 |
| # TINY1-NEXT: 0000000000020370 0000000200000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 |
| |
| ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s) |
| # TINY2: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # TINY2-NEXT: 0000000000020308 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248 |
| # TINY2-NEXT: 0000000000020310 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248 |
| |
| # TINY1: Hex dump of section '.got': |
| # TINY1-NEXT: 0x00020368 00000000 00000080 00000000 000000a0 |
| ## ^^ |
| ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA |
| ## ^^ |
| ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA |
| |
| # TINY2: Symbol table '.symtab' contains {{.*}} entries: |
| # TINY2: Num: Value Size Type Bind Vis Ndx Name |
| # TINY2: 0000000000010248 0 FUNC GLOBAL DEFAULT 6 bar |
| # TINY2: 0000000000010248 0 NOTYPE GLOBAL DEFAULT 6 zed |
| |
| # TINY2: Hex dump of section '.got': |
| # TINY2-NEXT: 0x00020308 00000000 00000080 00000000 000000a0 |
| ## ^^ |
| ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA |
| ## ^^ |
| ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA |
| |
| # RUN: llvm-objdump -d tiny1 | FileCheck %s --check-prefix=TINY1-ASM |
| |
| # TINY1-ASM: <_start>: |
| # TINY1-ASM-NEXT: adr x0, 0x20368 |
| # TINY1-ASM-NEXT: ldr x1, 0x20370 |
| |
| # RUN: llvm-objdump -d tiny2 | FileCheck %s --check-prefix=TINY2-ASM |
| |
| # TINY2-ASM: <_start>: |
| # TINY2-ASM-NEXT: adr x0, 0x20308 |
| # TINY2-ASM-NEXT: ldr x1, 0x20310 |
| |
| .globl _start |
| _start: |
| adr x0, :got_auth:bar |
| ldr x1, :got_auth:zed |
| |
| #--- err.s |
| # RUN: llvm-mc -filetype=obj -triple=aarch64 err.s -o err.o |
| # RUN: not ld.lld err.o a.so -pie 2>&1 | FileCheck %s --check-prefix=ERR --implicit-check-not=error: |
| # ERR: error: both AUTH and non-AUTH GOT entries for 'bar' requested, but only one type of GOT entry per symbol is supported |
| |
| .globl _start |
| _start: |
| adrp x0, :got_auth:bar |
| ldr x0, [x0, :got_auth_lo12:bar] |
| adrp x0, :got:bar |
| ldr x0, [x0, :got_lo12:bar] |