forked from OSchip/llvm-project
147 lines
5.6 KiB
ArmAsm
147 lines
5.6 KiB
ArmAsm
# REQUIRES: x86
|
|
|
|
# RUN: rm -rf %t; split-file %s %t
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/basics.s -o %t/basics.o
|
|
|
|
## Check that .private_extern symbols are marked as local in the symbol table
|
|
## and aren't in the export trie.
|
|
# RUN: %lld -dylib %t/basics.o -o %t/basics
|
|
# RUN: llvm-objdump --syms --exports-trie %t/basics | \
|
|
# RUN: FileCheck --check-prefix=EXPORTS %s
|
|
# RUN: llvm-nm -m %t/basics | FileCheck --check-prefix=EXPORTS-NM %s
|
|
# EXPORTS-LABEL: SYMBOL TABLE:
|
|
# EXPORTS-DAG: [[#%x, FOO_ADDR:]] l {{.*}} _foo
|
|
# EXPORTS-DAG: [[#%x, BAR_ADDR:]] g {{.*}} _bar
|
|
# EXPORTS-LABEL: Exports trie:
|
|
# EXPORTS-NOT: 0x{{0*}}[[#%X, FOO_ADDR]] _foo
|
|
# EXPORTS-DAG: 0x{{0*}}[[#%X, BAR_ADDR]] _bar
|
|
# EXPORTS-NOT: 0x{{0*}}[[#%X, FOO_ADDR]] _foo
|
|
# EXPORTS-NM-DAG: (__TEXT,__cstring) non-external (was a private external) _foo
|
|
# EXPORTS-NM-DAG: (__TEXT,__cstring) external _bar
|
|
|
|
## The tests for weak .private_extern symbols not being referenced in the
|
|
## weak bind table can be found in weak-private-extern.s
|
|
|
|
#--- basics.s
|
|
.section __TEXT,__cstring
|
|
|
|
.globl _foo, _bar
|
|
.private_extern _foo
|
|
|
|
_foo:
|
|
.asciz "Foo"
|
|
|
|
_bar:
|
|
.asciz "Bar"
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/strong-globl.s -o %t/strong-globl.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/weak-globl.s -o %t/weak-globl.o
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/strong-private.s -o %t/strong-private.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/weak-private.s -o %t/weak-private.o
|
|
|
|
## weak + strong symbol takes privateness from strong symbol
|
|
## - weak private extern + strong extern = strong extern (for both .o orderings)
|
|
# RUN: %lld -dylib %t/weak-private.o %t/strong-globl.o -o %t/wpsg
|
|
# RUN: llvm-nm -m %t/wpsg | FileCheck --check-prefix=EXTERNAL %s
|
|
# RUN: %lld -dylib %t/strong-globl.o %t/weak-private.o -o %t/sgwp
|
|
# RUN: llvm-nm -m %t/sgwp | FileCheck --check-prefix=EXTERNAL %s
|
|
# EXTERNAL: (__TEXT,__text) external _foo
|
|
## - weak extern + strong private extern = strong private extern
|
|
## (for both .o orderings)
|
|
# RUN: %lld -dylib %t/weak-globl.o %t/strong-private.o -o %t/wgsp
|
|
# RUN: llvm-nm -m %t/wgsp | FileCheck --check-prefix=NONEXTERNAL %s
|
|
# RUN: %lld -dylib %t/strong-private.o %t/weak-globl.o -o %t/spwg
|
|
# RUN: llvm-nm -m %t/spwg | FileCheck --check-prefix=NONEXTERNAL %s
|
|
# NONEXTERNAL: (__TEXT,__text) non-external (was a private external) _foo
|
|
|
|
## weak + weak symbol take weaker privateness
|
|
## - weak extern + weak private extern = weak extern (both orders)
|
|
# RUN: %lld -dylib %t/weak-private.o %t/weak-globl.o -o %t/wpwg
|
|
# RUN: llvm-nm -m %t/wpwg | FileCheck --check-prefix=WEAK-EXTERNAL %s
|
|
# RUN: %lld -dylib %t/weak-globl.o %t/weak-private.o -o %t/wgwp
|
|
# RUN: llvm-nm -m %t/wgwp | FileCheck --check-prefix=WEAK-EXTERNAL %s
|
|
# WEAK-EXTERNAL: (__TEXT,__text) weak external _foo
|
|
## - weak private extern + weak private extern = weak private extern
|
|
# RUN: %lld -dylib %t/weak-private.o %t/weak-private.o -o %t/wpwp
|
|
# RUN: llvm-nm -m %t/wpwp | FileCheck --check-prefix=NONEXTERNAL %s
|
|
|
|
#--- strong-globl.s
|
|
.globl _foo
|
|
_foo:
|
|
retq
|
|
|
|
#--- weak-globl.s
|
|
.globl _foo
|
|
.weak_definition _foo
|
|
_foo:
|
|
retq
|
|
|
|
#--- strong-private.s
|
|
.private_extern _foo
|
|
.globl _foo
|
|
_foo:
|
|
retq
|
|
|
|
#--- weak-private.s
|
|
.private_extern _foo
|
|
.globl _foo
|
|
.weak_definition _foo
|
|
_foo:
|
|
retq
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/comm-small.s -o %t/comm-small.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/comm-large.s -o %t/comm-large.o
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/comm-small-private.s -o %t/comm-small-private.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos \
|
|
# RUN: %t/comm-large-private.s -o %t/comm-large-private.o
|
|
|
|
## For common symbols the larger one wins.
|
|
## - smaller private extern + larger extern = larger extern
|
|
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-large.o -o %t/cspcl
|
|
# RUN: llvm-nm -m %t/cspcl | FileCheck --check-prefix=COMMON-EXTERNAL %s
|
|
# RUN: %lld -dylib %t/comm-large.o %t/comm-small-private.o -o %t/clcsp
|
|
# RUN: llvm-nm -m %t/clcsp | FileCheck --check-prefix=COMMON-EXTERNAL %s
|
|
# COMMON-EXTERNAL: (__DATA,__common) external _foo
|
|
## - smaller extern + larger private extern = larger private extern
|
|
# RUN: %lld -dylib %t/comm-large-private.o %t/comm-small.o -o %t/clpcs
|
|
# RUN: llvm-nm -m %t/clpcs | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
|
|
# RUN: %lld -dylib %t/comm-small.o %t/comm-large-private.o -o %t/csclp
|
|
# RUN: llvm-nm -m %t/csclp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
|
|
# COMMON-NONEXTERNAL: (__DATA,__common) non-external (was a private external) _foo
|
|
|
|
# For common symbols with the same size, the privateness of the symbol seen
|
|
# later wins (!).
|
|
## - equal private extern + equal extern = equal extern (both orders)
|
|
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-small.o -o %t/cspcs
|
|
# RUN: llvm-nm -m %t/cspcs | FileCheck --check-prefix=COMMON-EXTERNAL %s
|
|
## - equal extern + equal private extern = equal private extern (both orders)
|
|
# RUN: %lld -dylib %t/comm-small.o %t/comm-small-private.o -o %t/cscsp
|
|
# RUN: llvm-nm -m %t/cscsp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
|
|
## - equal private extern + equal private extern = equal private extern
|
|
# RUN: %lld -dylib %t/comm-small-private.o %t/comm-small-private.o -o %t/cspcsp
|
|
# RUN: llvm-nm -m %t/cspcsp | FileCheck --check-prefix=COMMON-NONEXTERNAL %s
|
|
|
|
#--- comm-small.s
|
|
.comm _foo,4,2
|
|
|
|
#--- comm-large.s
|
|
.comm _foo,8,3
|
|
|
|
#--- comm-small-private.s
|
|
.private_extern _foo
|
|
.comm _foo,4,2
|
|
|
|
#--- comm-large-private.s
|
|
.private_extern _foo
|
|
.comm _foo,8,3
|