forked from OSchip/llvm-project
174 lines
5.0 KiB
ArmAsm
174 lines
5.0 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/test2.s -o %t/test2.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 -lSystem %t/test.o %t/test2.o %t/libfoo.dylib -o %t/test
|
|
|
|
# RUN: llvm-readobj --syms --macho-dysymtab %t/test | FileCheck %s
|
|
# CHECK: Symbols [
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _local
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __data
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: __dyld_private
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __data
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _private_external
|
|
# CHECK-NEXT: PrivateExtern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __text (0x1)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _private_external_weak
|
|
# CHECK-NEXT: PrivateExtern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __text (0x1)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _main
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __text (0x1)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _external_weak
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __text (0x1)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x80)
|
|
# CHECK-NEXT: WeakDef (0x80)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _external
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __data
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x0)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x1{{[0-9a-f]*}}
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: __mh_execute_header
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Section (0xE)
|
|
# CHECK-NEXT: Section: __text (0x1)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x10)
|
|
# CHECK-NEXT: ReferencedDynamically (0x10)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x100000000
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: dyld_stub_binder
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Undef (0x0)
|
|
# CHECK-NEXT: Section: (0x0)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x100)
|
|
# CHECK-NEXT: SymbolResolver (0x100)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x0
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Symbol {
|
|
# CHECK-NEXT: Name: _dynamic
|
|
# CHECK-NEXT: Extern
|
|
# CHECK-NEXT: Type: Undef (0x0)
|
|
# CHECK-NEXT: Section: (0x0)
|
|
# CHECK-NEXT: RefType: UndefinedNonLazy (0x0)
|
|
# CHECK-NEXT: Flags [ (0x200)
|
|
# CHECK-NEXT: AltEntry (0x200)
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Value: 0x0
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Dysymtab {
|
|
# CHECK-NEXT: ilocalsym: 0
|
|
# CHECK-NEXT: nlocalsym: 4
|
|
# CHECK-NEXT: iextdefsym: 4
|
|
# CHECK-NEXT: nextdefsym: 4
|
|
# CHECK-NEXT: iundefsym: 8
|
|
# CHECK-NEXT: nundefsym: 2
|
|
|
|
## Verify that the first entry in the StringTable is a space, and that
|
|
## unreferenced symbols aren't emitted.
|
|
# RUN: obj2yaml %t/test | FileCheck %s --check-prefix=YAML
|
|
# YAML: StringTable:
|
|
# YAML-NEXT: ' '
|
|
# YAML-NOT: _unreferenced
|
|
|
|
#--- libfoo.s
|
|
.globl _dynamic
|
|
_dynamic:
|
|
|
|
#--- test.s
|
|
.globl _main, _external, _private_external, _external_weak, _private_external_weak, _unreferenced
|
|
|
|
.data
|
|
_external:
|
|
.space 1
|
|
_local:
|
|
.space 1
|
|
|
|
.text
|
|
.weak_definition _external_weak
|
|
_external_weak:
|
|
.space 1
|
|
|
|
.private_extern _private_external
|
|
_private_external:
|
|
.space 1
|
|
|
|
.weak_definition _private_external_weak
|
|
.private_extern _private_external_weak
|
|
_private_external_weak:
|
|
.space 1
|
|
|
|
_main:
|
|
callq _private_external
|
|
callq _dynamic
|
|
mov $0, %rax
|
|
ret
|
|
|
|
#--- test2.s
|
|
## These are both already in test.s and should make it into the symbol table
|
|
## just once.
|
|
.globl _external_weak, _private_external_weak
|
|
.text
|
|
.weak_definition _external_weak
|
|
_external_weak:
|
|
.space 1
|
|
.weak_definition _private_external_weak
|
|
.private_extern _private_external_weak
|
|
_private_external_weak:
|
|
.space 1
|