CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
172 lines
7.2 KiB
ArmAsm
172 lines
7.2 KiB
ArmAsm
# REQUIRES: x86
|
|
# RUN: rm -rf %t; split-file %s %t
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libfoo.s -o %t/libfoo.o
|
|
# RUN: %lld -dylib %t/libfoo.o -o %t/libfoo.dylib
|
|
# RUN: %lld %t/test.o -L%t -lfoo -o %t/test -lSystem
|
|
# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --rebase --bind --lazy-bind --weak-bind \
|
|
# RUN: --full-contents %t/test | FileCheck --check-prefixes=COMMON,CHECK %s
|
|
|
|
# RUN: %lld -fixup_chains %t/test.o -L%t -lfoo -o %t/chained -lSystem
|
|
# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --syms --full-contents %t/chained > %t/chained.objdump
|
|
# RUN: llvm-objdump --no-print-imm-hex --macho --dyld-info %t/chained >> %t/chained.objdump
|
|
# RUN: FileCheck %s --check-prefixes=COMMON,CHAINED < %t/chained.objdump
|
|
|
|
# CHAINED: SYMBOL TABLE:
|
|
# CHAINED: [[#%x,WEAK_INT:]] l F __TEXT,__text _weak_internal{{$}}
|
|
|
|
# COMMON: Contents of section __DATA_CONST,__got:
|
|
## Check that this section contains a nonzero pointer. It should point to
|
|
## _weak_external_for_gotpcrel.
|
|
# COMMON-NEXT: {{[0-9a-f]+}} {{[0-9a-f ]*[1-9a-f]+[0-9a-f ]*}}
|
|
|
|
# CHECK: Contents of section __DATA,__la_symbol_ptr:
|
|
## Check that this section contains a nonzero pointer. It should point to
|
|
## _weak_external_fn, but we don't have a good way of testing the exact value as
|
|
## the bytes here are in little-endian order.
|
|
# CHECK-NEXT: {{[0-9a-f]+}} {{[0-9a-f ]*[1-9a-f]+[0-9a-f ]*}}
|
|
|
|
# COMMON-LABEL: <_main>:
|
|
# COMMON-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_DY_GOT_ADDR:]]
|
|
# COMMON-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_EXT_GOT_ADDR:]]
|
|
# COMMON-NEXT: leaq [[#]](%rip), %rax ## 0x[[#%X,WEAK_INT_GOT_ADDR:]]
|
|
# COMMON-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_TLV_ADDR:]]
|
|
# COMMON-NEXT: movq [[#]](%rip), %rax ## 0x[[#%X,WEAK_DY_TLV_ADDR:]]
|
|
# COMMON-NEXT: leaq [[#]](%rip), %rax ## 0x[[#%X,WEAK_INT_TLV_ADDR:]]
|
|
# COMMON-NEXT: callq 0x{{[0-9a-f]*}}
|
|
# COMMON-NEXT: callq 0x{{[0-9a-f]*}}
|
|
# COMMON-NEXT: callq 0x{{[0-9a-f]*}}
|
|
|
|
# CHECK-LABEL: Rebase table:
|
|
# CHECK: __DATA __la_symbol_ptr 0x[[#%x,WEAK_EXT_FN:]] pointer
|
|
|
|
# CHECK-LABEL: Bind table:
|
|
# CHECK-DAG: __DATA_CONST __got 0x[[#WEAK_DY_GOT_ADDR]] pointer 0 libfoo _weak_dysym_for_gotpcrel
|
|
# CHECK-DAG: __DATA __la_symbol_ptr 0x[[#%x,WEAK_DY_FN:]] pointer 0 libfoo _weak_dysym_fn
|
|
# CHECK-DAG: __DATA __data 0x[[#%x,WEAK_DY:]] pointer 0 libfoo _weak_dysym
|
|
# CHECK-DAG: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
|
|
# CHECK-DAG: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
|
|
# CHECK-DAG: __DATA __thread_ptrs 0x[[#WEAK_DY_TLV_ADDR]] pointer 0 libfoo _weak_dysym_tlv
|
|
## Check that we don't have any other bindings
|
|
# CHECK-EMPTY:
|
|
|
|
# CHECK-LABEL: Lazy bind table:
|
|
# CHECK-NEXT: segment section address dylib symbol
|
|
## Verify that we have no lazy bindings
|
|
# CHECK-EMPTY:
|
|
|
|
# CHECK-LABEL: Weak bind table:
|
|
# CHECK-DAG: __DATA_CONST __got 0x[[#WEAK_DY_GOT_ADDR]] pointer 0 _weak_dysym_for_gotpcrel
|
|
# CHECK-DAG: __DATA_CONST __got 0x[[#WEAK_EXT_GOT_ADDR]] pointer 0 _weak_external_for_gotpcrel
|
|
# CHECK-DAG: __DATA __data 0x[[#WEAK_DY]] pointer 0 _weak_dysym
|
|
# CHECK-DAG: __DATA __thread_ptrs 0x[[#WEAK_TLV_ADDR]] pointer 0 _weak_tlv
|
|
# CHECK-DAG: __DATA __thread_ptrs 0x[[#WEAK_DY_TLV_ADDR]] pointer 0 _weak_dysym_tlv
|
|
# CHECK-DAG: __DATA __data 0x{{[0-9a-f]*}} pointer 2 _weak_external
|
|
# CHECK-DAG: __DATA __la_symbol_ptr 0x[[#WEAK_DY_FN]] pointer 0 _weak_dysym_fn
|
|
# CHECK-DAG: __DATA __la_symbol_ptr 0x[[#WEAK_EXT_FN]] pointer 0 _weak_external_fn
|
|
## Check that we don't have any other bindings
|
|
# CHECK-EMPTY:
|
|
|
|
## Weak internal symbols don't get bindings
|
|
# RUN: llvm-objdump --macho --bind --lazy-bind --weak-bind %t/test | FileCheck %s --check-prefix=WEAK-INTERNAL
|
|
# WEAK-INTERNAL-NOT: _weak_internal
|
|
# WEAK-INTERNAL-NOT: _weak_internal_fn
|
|
# WEAK-INTERNAL-NOT: _weak_internal_tlv
|
|
|
|
# CHAINED-LABEL: dyld information:
|
|
# CHAINED-NEXT: segment section address pointer type addend dylib symbol/vm address
|
|
# CHAINED-DAG: __DATA_CONST __got 0x{{[0-9a-f]*}} {{.*}} bind 0x0 weak _weak_external_fn
|
|
# CHAINED-DAG: __DATA_CONST __got 0x{{[0-9a-f]*}} {{.*}} bind 0x0 weak _weak_dysym_fn
|
|
# CHAINED-DAG: __DATA_CONST __got 0x[[#WEAK_EXT_GOT_ADDR]] {{.*}} bind 0x0 weak _weak_external_for_gotpcrel
|
|
# CHAINED-DAG: __DATA_CONST __got 0x[[#WEAK_DY_GOT_ADDR]] {{.*}} bind 0x0 weak _weak_dysym_for_gotpcrel
|
|
# CHAINED-DAG: __DATA __data 0x{{[0-9a-f]*}} {{.*}} bind 0x0 weak _weak_dysym
|
|
# CHAINED-DAG: __DATA __data 0x{{[0-9a-f]*}} {{.*}} bind 0x2 weak _weak_external
|
|
# CHAINED-DAG: __DATA __data 0x{{[0-9a-f]*}} {{.*}} rebase 0x[[#%X,WEAK_INT]]
|
|
# CHAINED-DAG: __DATA __thread_vars 0x{{[0-9a-f]*}} {{.*}} bind 0x0 libSystem __tlv_bootstrap
|
|
# CHAINED-DAG: __DATA __thread_vars 0x{{[0-9a-f]*}} {{.*}} bind 0x0 libSystem __tlv_bootstrap
|
|
# CHAINED-DAG: __DATA __thread_ptrs 0x[[#WEAK_DY_TLV_ADDR]] {{.*}} bind 0x0 weak _weak_dysym_tlv
|
|
# CHAINED-DAG: __DATA __thread_ptrs 0x[[#WEAK_TLV_ADDR]] {{.*}} bind 0x0 weak _weak_tlv
|
|
# CHAINED-EMPTY:
|
|
|
|
#--- libfoo.s
|
|
|
|
.globl _weak_dysym
|
|
.weak_definition _weak_dysym
|
|
_weak_dysym:
|
|
.quad 0x1234
|
|
|
|
.globl _weak_dysym_for_gotpcrel
|
|
.weak_definition _weak_dysym_for_gotpcrel
|
|
_weak_dysym_for_gotpcrel:
|
|
.quad 0x1234
|
|
|
|
.globl _weak_dysym_fn
|
|
.weak_definition _weak_dysym_fn
|
|
_weak_dysym_fn:
|
|
ret
|
|
|
|
.section __DATA,__thread_vars,thread_local_variables
|
|
|
|
.globl _weak_dysym_tlv
|
|
.weak_definition _weak_dysym_tlv
|
|
_weak_dysym_tlv:
|
|
.quad 0x1234
|
|
|
|
#--- test.s
|
|
|
|
.globl _main, _weak_external, _weak_external_for_gotpcrel, _weak_external_fn
|
|
.weak_definition _weak_external, _weak_external_for_gotpcrel, _weak_external_fn, _weak_internal, _weak_internal_for_gotpcrel, _weak_internal_fn
|
|
|
|
_main:
|
|
mov _weak_dysym_for_gotpcrel@GOTPCREL(%rip), %rax
|
|
mov _weak_external_for_gotpcrel@GOTPCREL(%rip), %rax
|
|
mov _weak_internal_for_gotpcrel@GOTPCREL(%rip), %rax
|
|
mov _weak_tlv@TLVP(%rip), %rax
|
|
mov _weak_dysym_tlv@TLVP(%rip), %rax
|
|
mov _weak_internal_tlv@TLVP(%rip), %rax
|
|
callq _weak_dysym_fn
|
|
callq _weak_external_fn
|
|
callq _weak_internal_fn
|
|
mov $0, %rax
|
|
ret
|
|
|
|
_weak_external:
|
|
.quad 0x1234
|
|
|
|
_weak_external_for_gotpcrel:
|
|
.quad 0x1234
|
|
|
|
_weak_external_fn:
|
|
ret
|
|
|
|
_weak_internal:
|
|
.quad 0x1234
|
|
|
|
_weak_internal_for_gotpcrel:
|
|
.quad 0x1234
|
|
|
|
_weak_internal_fn:
|
|
ret
|
|
|
|
.data
|
|
.quad _weak_dysym
|
|
.quad _weak_external + 2
|
|
.quad _weak_internal
|
|
|
|
.tbss _weak_tlv$tlv$init, 4, 2
|
|
.tbss _weak_internal_tlv$tlv$init, 4, 2
|
|
|
|
.section __DATA,__thread_vars,thread_local_variables
|
|
.globl _weak_tlv
|
|
.weak_definition _weak_tlv, _weak_internal_tlv
|
|
|
|
_weak_tlv:
|
|
.quad __tlv_bootstrap
|
|
.quad 0
|
|
.quad _weak_tlv$tlv$init
|
|
|
|
_weak_internal_tlv:
|
|
.quad __tlv_bootstrap
|
|
.quad 0
|
|
.quad _weak_internal_tlv$tlv$init
|