blob: 224ddc4ec38d683361d2709b4f66b0715ac2f7fe [file] [log] [blame] [edit]
# REQUIRES: x86
# RUN: rm -rf %t; split-file %s %t
# RUN: mkdir -p %t/bin
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/weak.o %t/weak.s
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/strong_a.o %t/strong_a.s
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t/strong_b.o %t/strong_b.s
# --- Test Case 1: No overrides
# RUN: %lld %t/weak.o -o %t/bin/alone -e _s
# RUN: llvm-nm -am %t/bin/alone | FileCheck --check-prefix=NM_ALONE %s
# NM_ALONE: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_ALONE: [[#P_ADDR]] (__TEXT,__const) weak external _weak_a
# NM_ALONE: [[#P_ADDR]] (__TEXT,__const) weak external _weak_b
# --- Test Case 2: Override weak_a
# RUN: %lld %t/weak.o %t/strong_a.o -o %t/bin/with_a -e _s
# RUN: llvm-nm -am %t/bin/with_a | FileCheck --check-prefix=NM_WITH_A %s
# RUN: llvm-nm -am %t/bin/with_a | FileCheck --check-prefix=NM_WITH_A_BAD %s
# NM_WITH_A: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_A: [[#%x, A_ADDR:]] (__TEXT,__const) external _strong_a
# NM_WITH_A: [[#A_ADDR]] (__TEXT,__const) external _weak_a
# NM_WITH_A: [[#P_ADDR]] (__TEXT,__const) weak external _weak_b
# --- Addresses of _placeholder_int and _strong_a must not match.
# NM_WITH_A_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_A_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_a
# --- Test Case 3: Override weak_b
# RUN: %lld %t/weak.o %t/strong_b.o -o %t/bin/with_b -e _s
# RUN: llvm-nm -am %t/bin/with_b | FileCheck --check-prefix=NM_WITH_B %s
# RUN: llvm-nm -am %t/bin/with_b | FileCheck --check-prefix=NM_WITH_B_BAD %s
# NM_WITH_B: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_B: [[#%x, B_ADDR:]] (__TEXT,__const) external _strong_b
# NM_WITH_B: [[#P_ADDR]] (__TEXT,__const) weak external _weak_a
# NM_WITH_B: [[#B_ADDR]] (__TEXT,__const) external _weak_b
# --- Addresses of _placeholder_int and _strong_a must not match.
# NM_WITH_B_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_B_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_b
# --- Test Case 4: Override weak_a and weak_b
# RUN: %lld %t/weak.o %t/strong_a.o %t/strong_b.o -o %t/bin/with_ab -e _s
# RUN: llvm-nm -am %t/bin/with_ab | FileCheck --check-prefix=NM_WITH_AB %s
# RUN: llvm-nm -am %t/bin/with_ab | FileCheck --check-prefix=NM_WITH_AB_BAD %s
# NM_WITH_AB: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_AB: [[#%x, A_ADDR:]] (__TEXT,__const) external _strong_a
# NM_WITH_AB: [[#%x, B_ADDR:]] (__TEXT,__const) external _strong_b
# NM_WITH_AB: [[#A_ADDR]] (__TEXT,__const) external _weak_a
# NM_WITH_AB: [[#B_ADDR]] (__TEXT,__const) external _weak_b
# --- Addresses of _placeholder_int, _strong_a, and _strong_b must all be distinct
# NM_WITH_AB_BAD: [[#%x, P_ADDR:]] (__TEXT,__const) weak external _placeholder_int
# NM_WITH_AB_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_a
# NM_WITH_AB_BAD-NOT: [[#P_ADDR]] (__TEXT,__const) external _strong_b
#--- weak.s
.section __TEXT,__const
.globl _placeholder_int
.weak_definition _placeholder_int
_placeholder_int:
.long 0
.globl _weak_a
.set _weak_a, _placeholder_int
.weak_definition _weak_a
.globl _weak_b
.set _weak_b, _placeholder_int
.weak_definition _weak_b
.globl _s
_s:
.quad _weak_a
.quad _weak_b
#--- strong_a.s
.section __TEXT,__const
.globl _strong_a
_strong_a:
.long 1
.globl _weak_a
_weak_a = _strong_a
#--- strong_b.s
.section __TEXT,__const
.globl _strong_b
_strong_b:
.long 2
.globl _weak_b
_weak_b = _strong_b