98 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; split-file %s %t3# RUN: mkdir -p %t/bin4 5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/weak.o %t/weak.s6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/strong_a.o %t/strong_a.s7# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/strong_b.o %t/strong_b.s8 9# --- Test Case 1: No overrides10# RUN: %lld %t/weak.o -o %t/bin/alone -e _s11# RUN: llvm-nm -am %t/bin/alone | FileCheck --check-prefix=NM_ALONE %s12 13# NM_ALONE: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int14# NM_ALONE: [[#P_ADDR]] (__TEXT,__const) weak external _weak_a15# NM_ALONE: [[#P_ADDR]] (__TEXT,__const) weak external _weak_b16 17# --- Test Case 2: Override weak_a18# RUN: %lld %t/weak.o %t/strong_a.o -o %t/bin/with_a -e _s19# RUN: llvm-nm -am %t/bin/with_a | FileCheck --check-prefix=NM_WITH_A %s20# RUN: llvm-nm -am %t/bin/with_a | FileCheck --check-prefix=NM_WITH_A_BAD %s21 22# NM_WITH_A: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int23# NM_WITH_A: [[#%x, A_ADDR:]] (__TEXT,__const) external _strong_a24# NM_WITH_A: [[#A_ADDR]] (__TEXT,__const) external _weak_a25# NM_WITH_A: [[#P_ADDR]] (__TEXT,__const) weak external _weak_b26 27# --- Addresses of _placeholder_int and _strong_a must not match.28# NM_WITH_A_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int29# NM_WITH_A_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_a30 31# --- Test Case 3: Override weak_b32# RUN: %lld %t/weak.o %t/strong_b.o -o %t/bin/with_b -e _s33# RUN: llvm-nm -am %t/bin/with_b | FileCheck --check-prefix=NM_WITH_B %s34# RUN: llvm-nm -am %t/bin/with_b | FileCheck --check-prefix=NM_WITH_B_BAD %s35 36# NM_WITH_B: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int37# NM_WITH_B: [[#%x, B_ADDR:]] (__TEXT,__const) external _strong_b38# NM_WITH_B: [[#P_ADDR]] (__TEXT,__const) weak external _weak_a39# NM_WITH_B: [[#B_ADDR]] (__TEXT,__const) external _weak_b40 41# --- Addresses of _placeholder_int and _strong_a must not match.42# NM_WITH_B_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int43# NM_WITH_B_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_b44 45# --- Test Case 4: Override weak_a and weak_b46# RUN: %lld %t/weak.o %t/strong_a.o %t/strong_b.o -o %t/bin/with_ab -e _s47# RUN: llvm-nm -am %t/bin/with_ab | FileCheck --check-prefix=NM_WITH_AB %s48# RUN: llvm-nm -am %t/bin/with_ab | FileCheck --check-prefix=NM_WITH_AB_BAD %s49 50# NM_WITH_AB: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int51# NM_WITH_AB: [[#%x, A_ADDR:]] (__TEXT,__const) external _strong_a52# NM_WITH_AB: [[#%x, B_ADDR:]] (__TEXT,__const) external _strong_b53# NM_WITH_AB: [[#A_ADDR]] (__TEXT,__const) external _weak_a54# NM_WITH_AB: [[#B_ADDR]] (__TEXT,__const) external _weak_b55 56# --- Addresses of _placeholder_int, _strong_a, and _strong_b must all be distinct57# NM_WITH_AB_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int58# NM_WITH_AB_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_a59# NM_WITH_AB_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_b60 61#--- weak.s62.section __TEXT,__const63.globl _placeholder_int64.weak_definition _placeholder_int65_placeholder_int:66 .long 067 68.globl _weak_a69.set _weak_a, _placeholder_int70.weak_definition _weak_a71 72.globl _weak_b73.set _weak_b, _placeholder_int74.weak_definition _weak_b75 76.globl _s77_s:78 .quad _weak_a79 .quad _weak_b80 81#--- strong_a.s82.section __TEXT,__const83.globl _strong_a84_strong_a:85 .long 186 87.globl _weak_a88_weak_a = _strong_a89 90#--- strong_b.s91.section __TEXT,__const92.globl _strong_b93_strong_b:94 .long 295 96.globl _weak_b97_weak_b = _strong_b98