// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rela_iplt_end
-// CHECK-NEXT: Value: 0x200188
+// CHECK-NEXT: Name: __rela_iplt_start
+// CHECK-NEXT: Value: 0x200158
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rela.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rela_iplt_start
-// CHECK-NEXT: Value: 0x200158
+// CHECK-NEXT: Name: __rela_iplt_end
+// CHECK-NEXT: Value: 0x200188
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rela.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: _start
-// CHECK-NEXT: Value: 0x210190
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x210188
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
+// CHECK-NEXT: Type: GNU_IFunc
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: foo
-// CHECK-NEXT: Value: 0x210188
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x210190
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
adrp x8, foo
bl bar
-// CHECK: Name: bar
-// CHECK-NEXT: Value: 0x0
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x2102F0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
+// CHECK-NEXT: Type: Function
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Undefined
-// CHECK: Name: foo
-// CHECK-NEXT: Value: 0x2102F0
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: Function
+// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Undefined
# CHECK-NEXT: R_AMDGPU_ABS64 common_var0 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 common_var1 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 common_var2 0x0
-# CHECK-NEXT: R_AMDGPU_ABS64 extern_var0 0x0
-# CHECK-NEXT: R_AMDGPU_ABS64 extern_var1 0x0
-# CHECK-NEXT: R_AMDGPU_ABS64 extern_var2 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 global_var0 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 global_var1 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 global_var2 0x0
-# CHECK-NEXT: R_AMDGPU_ABS64 temp 0x0
+# CHECK-NEXT: R_AMDGPU_ABS64 extern_var0 0x0
+# CHECK-NEXT: R_AMDGPU_ABS64 extern_var1 0x0
+# CHECK-NEXT: R_AMDGPU_ABS64 extern_var2 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var0 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var1 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var2 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var0 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var1 0x0
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var2 0x0
+# CHECK-NEXT: R_AMDGPU_ABS64 temp 0x0
# CHECK-NEXT: }
# CHECK-NEXT: ]
// CHECK-NEXT: 0x30154 R_ARM_IRELATIVE
// CHECK-NEXT: }
// CHECK-NEXT: ]
-// CHECK: Symbol {
-// CHECK: Name: __rel_iplt_end
-// CHECK-NEXT: Value: 0x10104
+// CHECK: Name: __rel_iplt_start
+// CHECK-NEXT: Value: 0x100F4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rel.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rel_iplt_start
-// CHECK-NEXT: Value: 0x100F4
+// CHECK-NEXT: Name: __rel_iplt_end
+// CHECK-NEXT: Value: 0x10104
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rel.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: _start
-// CHECK-NEXT: Value: 0x2010C
-// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other:
-// CHECK-NEXT: Section: .text
-// CHECK-NEXT: }
-// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: bar
// CHECK-NEXT: Value: 0x20108
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x2010C
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
// DISASM: Disassembly of section .text:
// DISASM-EMPTY:
.cantunwind
.fnend
-// CHECK: Name: __exidx_end
-// CHECK-NEXT: Value: 0x100E4
+// CHECK: Name: __exidx_start
+// CHECK-NEXT: Value: 0x100D4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other [
// CHECK-NEXT: STV_HIDDEN
// CHECK-NEXT: ]
-// CHECK-NEXT: Section: .ARM.exidx
-// CHECK: Name: __exidx_start
-// CHECK-NEXT: Value: 0x100D4
+// CHECK: Name: __exidx_end
+// CHECK-NEXT: Value: 0x100E4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other [
// CHECK-NEXT: STV_HIDDEN
// CHECK-NEXT: ]
-// CHECK-NEXT: Section: .ARM.exidx
+// CHECK-NEXT: Section: .ARM.exidx
// CHECK: Symbol {
// CHECK-NEXT: Name: __tls_get_addr
# RUN: echo "SECTIONS { zed = foo; }" > %t2.script
# RUN: ld.lld -o %t2.exe --script %t2.script %tar.a %t.o
# RUN: llvm-readobj --symbols %t2.exe | FileCheck %s --check-prefix=SYMS
-# SYMS: bar
# SYMS: foo
+# SYMS: bar
.text
.globl foo
mov $42, %rax
retq
-# CHECK: Name: A
-# CHECK-NEXT: Value: 0x201120
-# CHECK: Name: B
-# CHECK-NEXT: Value: 0x201130
-# CHECK: Name: C
-# CHECK-NEXT: Value: 0x201128
# CHECK: Name: D
# CHECK-NEXT: Value: 0x201128
+# CHECK: Name: C
+# CHECK-NEXT: Value: 0x201128
+# CHECK: Name: B
+# CHECK-NEXT: Value: 0x201130
+# CHECK: Name: A
+# CHECK-NEXT: Value: 0x201120
-# NOICF: Name: A
-# NOICF-NEXT: Value: 0x201120
-# NOICF: Name: B
-# NOICF-NEXT: Value: 0x201128
-# NOICF: Name: C
-# NOICF-NEXT: Value: 0x201130
# NOICF: Name: D
# NOICF-NEXT: Value: 0x201138
+# NOICF: Name: C
+# NOICF-NEXT: Value: 0x201130
+# NOICF: Name: B
+# NOICF-NEXT: Value: 0x201128
+# NOICF: Name: A
+# NOICF-NEXT: Value: 0x201120
.cg_profile C, D, 90
# CHECK: 0000000000201123 t D
-# CHECK: 0000000000201120 T A
-# CHECK: 0000000000201121 T B
# CHECK: 0000000000201122 T C
+# CHECK: 0000000000201121 T B
+# CHECK: 0000000000201120 T A
# NO-CG: 0000000000201120 t D
-# NO-CG: 0000000000201123 T A
-# NO-CG: 0000000000201122 T B
# NO-CG: 0000000000201121 T C
+# NO-CG: 0000000000201122 T B
+# NO-CG: 0000000000201123 T A
# CHECK-NEXT: Value: 0x201124
# CHECK: Name: TooManyPreds10
# CHECK-NEXT: Value: 0x201138
-# CHECK: Name: A
-# CHECK-NEXT: Value: 0x201120
-# CHECK: Name: B
-# CHECK-NEXT: Value: 0x201121
# CHECK: Name: C
# CHECK-NEXT: Value: 0x201122
-# CHECK: Name: GB
-# CHECK-NEXT: Value: 0x20113F
+# CHECK: Name: B
+# CHECK-NEXT: Value: 0x201121
+# CHECK: Name: A
+# CHECK-NEXT: Value: 0x201120
+# CHECK: Name: TS
+# CHECK-NEXT: Value: 0x20113D
# CHECK: Name: PP
# CHECK-NEXT: Value: 0x20113C
# CHECK: Name: QC
# CHECK-NEXT: Value: 0x20113E
-# CHECK: Name: TS
-# CHECK-NEXT: Value: 0x20113D
+# CHECK: Name: GB
+# CHECK-NEXT: Value: 0x20113F
# CHECK: Name: _init
# CHECK-NEXT: Value: 0x201140
# CHECK: Name: _init2
# NOSORT-NEXT: Value: 0x201124
# NOSORT: Name: TooManyPreds10
# NOSORT-NEXT: Value: 0x201138
-# NOSORT: Name: A
-# NOSORT-NEXT: Value: 0x201123
-# NOSORT: Name: B
-# NOSORT-NEXT: Value: 0x201122
# NOSORT: Name: C
# NOSORT-NEXT: Value: 0x201121
-# NOSORT: Name: GB
-# NOSORT-NEXT: Value: 0x20113C
+# NOSORT: Name: B
+# NOSORT-NEXT: Value: 0x201122
+# NOSORT: Name: A
+# NOSORT-NEXT: Value: 0x201123
+# NOSORT: Name: TS
+# NOSORT-NEXT: Value: 0x201139
# NOSORT: Name: PP
# NOSORT-NEXT: Value: 0x20113A
# NOSORT: Name: QC
# NOSORT-NEXT: Value: 0x20113B
-# NOSORT: Name: TS
-# NOSORT-NEXT: Value: 0x201139
+# NOSORT: Name: GB
+# NOSORT-NEXT: Value: 0x20113C
# NOSORT: Name: _init
# NOSORT-NEXT: Value: 0x20113D
# NOSORT: Name: _init2
# RUN: ld.lld -shared %t1.o -o %t1.so
# RUN: llvm-readelf --dyn-syms %t1.so | FileCheck --check-prefix=SYMS %s
-# SYMS: [[ADDR:[0-9a-f]+]] {{.*}} 5 bar
-# SYMS: [[ADDR]] {{.*}} 5 foo
+# SYMS: [[ADDR:[0-9a-f]+]] {{.*}} 5 foo
+# SYMS: [[ADDR]] {{.*}} 5 bar
# SYMS: [[ADDR]] {{.*}} ABS zed
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t2.o
# CHECK: Relocations [
# CHECK-NEXT: .rela.dyn {
-# CHECK-NEXT: R_X86_64_COPY bar 0x0
# CHECK-NEXT: R_X86_64_COPY foo 0x0
+# CHECK-NEXT: R_X86_64_COPY bar 0x0
# CHECK-NEXT: }
# CHECK-NEXT: ]
// RUN: ld.lld -o /dev/null %t1.so %t2.o %t3.o %t.a -gc-sections -cref | FileCheck -strict-whitespace %s
// CHECK: Symbol File
-// CHECK-NEXT: bar {{.*}}2.o
-// CHECK-NEXT: {{.*}}3.o
// CHECK-NEXT: foo {{.*}}1.so
// CHECK-NEXT: {{.*}}2.o
// CHECK-NEXT: {{.*}}3.o
+// CHECK-NEXT: bar {{.*}}2.o
+// CHECK-NEXT: {{.*}}3.o
// CHECK-NEXT: _start {{.*}}3.o
// CHECK-NEXT: baz {{.*}}3.o
// CHECK-NEXT: zed {{.*}}.a({{.*}}a.o)
# DYNSYMS-NEXT: Section: Undefined
# DYNSYMS-NEXT: }
# DYNSYMS-NEXT: Symbol {
-# DYNSYMS-NEXT: Name: bar
+# DYNSYMS-NEXT: Name: foo
# DYNSYMS-NEXT: Value:
# DYNSYMS-NEXT: Size:
# DYNSYMS-NEXT: Binding: Global
# DYNSYMS-NEXT: Section:
# DYNSYMS-NEXT: }
# DYNSYMS-NEXT: Symbol {
-# DYNSYMS-NEXT: Name: ext
+# DYNSYMS-NEXT: Name: bar
# DYNSYMS-NEXT: Value:
# DYNSYMS-NEXT: Size:
# DYNSYMS-NEXT: Binding: Global
# DYNSYMS-NEXT: Section:
# DYNSYMS-NEXT: }
# DYNSYMS-NEXT: Symbol {
-# DYNSYMS-NEXT: Name: foo
+# DYNSYMS-NEXT: Name: ext
# DYNSYMS-NEXT: Value:
# DYNSYMS-NEXT: Size:
# DYNSYMS-NEXT: Binding: Global
# EXPORT: Symbol table '.dynsym' contains 8 entries:
# EXPORT: GLOBAL DEFAULT {{.*}} shared
# EXPORT-NEXT: WEAK DEFAULT {{.*}} undef_weak
-# EXPORT-NEXT: GLOBAL PROTECTED {{.*}} _start
-# EXPORT-NEXT: GLOBAL DEFAULT ABS abs
-# EXPORT-NEXT: GLOBAL DEFAULT {{.*}} common
# EXPORT-NEXT: WEAK DEFAULT {{.*}} weak_default
+# EXPORT-NEXT: GLOBAL DEFAULT {{.*}} common
+# EXPORT-NEXT: GLOBAL DEFAULT ABS abs
+# EXPORT-NEXT: GLOBAL PROTECTED {{.*}} _start
# EXPORT-NEXT: GLOBAL DEFAULT {{.*}} defsym
.weak undef_weak
# RUN: llvm-readobj --dyn-relocations %t.so | FileCheck %s
# CHECK: Dynamic Relocations {
-# CHECK-NEXT: R_X86_64_64 bar 0x0
# CHECK-NEXT: R_X86_64_GLOB_DAT foo 0x0
+# CHECK-NEXT: R_X86_64_64 bar 0x0
# CHECK-NEXT: }
.data
// CHECK: Name Type Address Off
// CHECK: .text PROGBITS 0000000000201120 000120
// CHECK: Value Size Type Bind Vis Ndx Name
-// CHECK: 0000000000200000 0 NOTYPE LOCAL HIDDEN 1 __rela_iplt_end
// CHECK: 0000000000200000 0 NOTYPE LOCAL HIDDEN 1 __rela_iplt_start
+// CHECK: 0000000000200000 0 NOTYPE LOCAL HIDDEN 1 __rela_iplt_end
.globl _start
_start:
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rel_iplt_end
-// CHECK-NEXT: Value: 0x4000E4
+// CHECK-NEXT: Name: __rel_iplt_start
+// CHECK-NEXT: Value: [[RELA]]
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rel.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rel_iplt_start
-// CHECK-NEXT: Value: [[RELA]]
+// CHECK-NEXT: Name: __rel_iplt_end
+// CHECK-NEXT: Value: 0x4000E4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rel.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: _start
-// CHECK-NEXT: Value: 0x4010E6
-// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: .text
-// CHECK-NEXT: }
-// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: bar
// CHECK-NEXT: Value: 0x401110
// CHECK-NEXT: Size: 0
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: bar_resolver
-// CHECK-NEXT: Value: 0x4010E5
+// CHECK-NEXT: Value: 0x4010E4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Function
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: foo_resolver
-// CHECK-NEXT: Value: 0x4010E4
+// CHECK-NEXT: Value: 0x4010E5
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Function
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x4010E6
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
// CHECK-NEXT:]
// DISASM: Disassembly of section .text:
// DISASM-EMPTY:
-// DISASM-NEXT: <foo_resolver>:
+// DISASM-NEXT: <bar_resolver>:
// DISASM-NEXT: 4010e4: retl
-// DISASM: <bar_resolver>:
+// DISASM: <foo_resolver>:
// DISASM-NEXT: 4010e5: retl
// DISASM: <_start>:
// DISASM-NEXT: 4010e6: calll 0x401100 <foo>
// DISASM-NEXT: pushl $8
// DISASM-NEXT: jmp 0x0
+.type bar STT_GNU_IFUNC
+.globl bar
+bar:
+.type bar_resolver STT_FUNC
+.globl bar_resolver
+bar_resolver:
+ ret
+
.text
.type foo STT_GNU_IFUNC
.globl foo
foo_resolver:
ret
-.type bar STT_GNU_IFUNC
-.globl bar
-bar:
-.type bar_resolver STT_FUNC
-.globl bar_resolver
-bar_resolver:
- ret
-
.globl _start
_start:
call foo
// Check that we emitted relocations for the ifunc calls
// CHECK: Relocations [
// CHECK-NEXT: Section (4) .rel.dyn {
-// CHECK-NEXT: 0x4011F4 R_386_PLT32 bar
// CHECK-NEXT: 0x4011EF R_386_PLT32 foo
+// CHECK-NEXT: 0x4011F4 R_386_PLT32 bar
// CHECK-NEXT: }
// CHECK-NEXT: Section (5) .rel.plt {
// CHECK-NEXT: 0x4032D4 R_386_JUMP_SLOT bar2
// Check that we emitted relocations for the ifunc calls
// CHECK: Relocations [
// CHECK-NEXT: Section (4) .rela.dyn {
-// CHECK-NEXT: 0x201328 R_X86_64_PLT32 bar 0xFFFFFFFFFFFFFFFC
// CHECK-NEXT: 0x201323 R_X86_64_PLT32 foo 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x201328 R_X86_64_PLT32 bar 0xFFFFFFFFFFFFFFFC
// CHECK-NEXT: }
// CHECK-NEXT: Section (5) .rela.plt {
// CHECK-NEXT: 0x203498 R_X86_64_JUMP_SLOT bar2 0x0
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rela_iplt_end
-// CHECK-NEXT: Value: 0x200188
+// CHECK-NEXT: Name: __rela_iplt_start
+// CHECK-NEXT: Value: [[RELA]]
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rela.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rela_iplt_start
-// CHECK-NEXT: Value: [[RELA]]
+// CHECK-NEXT: Name: __rela_iplt_end
+// CHECK-NEXT: Value: 0x200188
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Section: .rela.dyn
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: _start
-// CHECK-NEXT: Value: 0x20118A
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x201188
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
+// CHECK-NEXT: Type: GNU_IFunc
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: foo
-// CHECK-NEXT: Value: 0x201188
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x20118A
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
# We used to mark bar as absolute.
# CHECK: [ 5] .text
-# CHECK: [[ADDR:[0-9a-f]+]] 0 NOTYPE GLOBAL DEFAULT 5 bar
-# CHECK: [[ADDR]] 0 NOTYPE GLOBAL DEFAULT 5 foo
+# CHECK: [[ADDR:[0-9a-f]+]] 0 NOTYPE GLOBAL DEFAULT 5 foo
+# CHECK: [[ADDR]] 0 NOTYPE GLOBAL DEFAULT 5 bar
# The nop makes the test more interesting by making the offset of
# text.f non zero.
## Test we resolve both to the same file.
# RUN: ld.lld -y a -y foo -y __foo %t/main.o --start-lib %t/a.o %t/b.o --end-lib -o /dev/null | FileCheck %s
-# CHECK: a.o: lazy definition of __foo
-# CHECK-NEXT: a.o: lazy definition of a
+# CHECK: a.o: lazy definition of a
# CHECK-NEXT: a.o: lazy definition of foo
-# CHECK-NEXT: b.o: definition of __foo
+# CHECK-NEXT: a.o: lazy definition of __foo
# CHECK-NEXT: b.o: definition of foo
+# CHECK-NEXT: b.o: definition of __foo
# CHECK-NEXT: b.o: reference to a
# CHECK-NEXT: a.o: definition of a
# RUN: ld.lld -just-symbols=%t1.exe -o %t2.exe -cref | FileCheck %s
# CHECK: Symbol File
-# CHECK-NEXT: bar {{.*exe}}
# CHECK-NEXT: foo {{.*exe}}
+# CHECK-NEXT: bar {{.*exe}}
.globl foo, bar
foo:
# RUN: ld.lld -just-symbols=%t1.exe -o %t2.exe
# RUN: llvm-readelf -symbols %t2.exe | FileCheck %s
-# CHECK: 0000000000011001 40 OBJECT GLOBAL DEFAULT ABS bar
# CHECK: 0000000000010000 0 NOTYPE GLOBAL DEFAULT ABS foo
+# CHECK: 0000000000011001 40 OBJECT GLOBAL DEFAULT ABS bar
.globl foo, bar
foo:
# For a common with multiple definitions, the largest one wins and it must be
# assigned to the section from the file which provided the winning def
# CHECK: Symbol {
-# CHECK: Name: common_multiple
-# CHECK-NEXT: Value: 0x10
-# CHECK-NEXT: Size: 32
+# CHECK: Name: common_uniq_0
+# CHECK-NEXT: Value: 0x4
+# CHECK-NEXT: Size: 4
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type: Object
# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .common_2
+# CHECK-NEXT: Section: .common_0
# CHECK-NEXT: }
# CHECK: Symbol {
-# CHECK: Name: common_uniq_0
-# CHECK-NEXT: Value: 0x4
-# CHECK-NEXT: Size: 4
+# CHECK: Name: common_multiple
+# CHECK-NEXT: Value: 0x10
+# CHECK-NEXT: Size: 32
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type: Object
# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .common_0
+# CHECK-NEXT: Section: .common_2
# CHECK-NEXT: }
# CHECK: Symbol {
# CHECK: Name: common_uniq_1
# CHECK-NEXT: 1228 3218 30 1 {{.*}}{{/|\\}}map-file2.test.tmp.o:(.eh_frame+0x0)
# CHECK-NEXT: 125c 324c 1 4 .text
# CHECK-NEXT: 125c 324c 1 4 {{.*}}{{/|\\}}map-file2.test.tmp.o:(.text)
-# CHECK-NEXT: 125c 324c 0 1 f(int)
# CHECK-NEXT: 125c 324c 0 1 _start
+# CHECK-NEXT: 125c 324c 0 1 f(int)
# CHECK-NEXT: 0 0 8 1 .comment
# CHECK-NEXT: 0 0 8 1 <internal>:(.comment)
# CHECK-NEXT: 0 0 48 8 .symtab
## (It should belong to the section .text and point to it's start).
# CHECK: Symbol {
-# CHECK: Name: __text
+# CHECK: Name: aliasto__text
# CHECK-NEXT: Value: 0x1000
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: }
# CHECK: Symbol {
-# CHECK: Name: aliasto__text
+# CHECK: Name: __text
# CHECK-NEXT: Value: 0x1000
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Global
# RUN: llvm-nm -p %t | FileCheck %s
# CHECK: 0000000000000000 T _start
+# CHECK-NEXT: 0000000000000001 T foo
# CHECK-NEXT: 0000000000005678 A bar
# CHECK-NEXT: 0000000000009abc A baz
-# CHECK-NEXT: 0000000000000001 T foo
# CHECK-NEXT: 0000000000001000 A symbol
# CHECK-NEXT: 0000000000002234 A symbol2
# CHECK-NEXT: 0000000000002234 A symbol3
}
# CHECK: 0000000000000160 l .foo 0000000000000000 .hidden _end_sec
+# CHECK-NEXT: 000000000000104c g .text 0000000000000000 _start
# CHECK-NEXT: 0000000000000158 g .foo 0000000000000000 _begin_sec
# CHECK-NEXT: 0000000000000160 g *ABS* 0000000000000000 _end_sec_abs
-# CHECK-NEXT: 000000000000104c g .text 0000000000000000 _start
# CHECK-NEXT: 0000000000000158 g .foo 0000000000000000 begin_foo
# CHECK-NEXT: 0000000000000160 g .foo 0000000000000000 end_foo
# CHECK-NEXT: 0000000000000008 g *ABS* 0000000000000000 size_foo_1
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
# RUN: llvm-readobj --dyn-syms %t.so | FileCheck %s
-# CHECK: Name: _end@@VER1
+# CHECK: Name: foo@@VER1
# CHECK-NEXT: Value: 0
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type: None
# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .data
+# CHECK-NEXT: Section: .text
-# CHECK: Name: foo@@VER1
+# CHECK: Name: _end@@VER1
# CHECK-NEXT: Value: 0
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type: None
# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text
+# CHECK-NEXT: Section: .data
.global foo
foo:
// GC: Symbol {
// GC-NEXT: Name: sdn
// GC: Symbol {
-// GC-NEXT: Name: _start
-// GC: Symbol {
// GC-NEXT: Name: abs
// GC: Symbol {
// GC-NEXT: Name: common
+// GC: Symbol {
+// GC-NEXT: Name: _start
// GC-NOT: Symbol {
.macro gen_sections4 x
# CHECK-NOT: bar
# CHECK: Symbol table '.symtab'
-# CHECK: {{.*}}: 00000000 {{.*}} _foo
# CHECK: {{.*}}: [[BAR:[0-9a-f]+]] {{.*}} bar
+# CHECK: {{.*}}: 00000000 {{.*}} _foo
# CHECK: Primary GOT:
# CHECK: Local entries:
# RUN: | FileCheck --check-prefix=MICRO %s
# REG: {{0*}}[[FOOT:[0-9a-f]+]] l F .text 0000000e 0x80 __microLA25Thunk_foo
-# REG: {{0*}}[[BAR:[0-9a-f]+]] g F .text 00000000 bar
# REG: {{0*}}[[MIC:[0-9a-f]+]] g .text 00000000 0x80 micro
+# REG: {{0*}}[[BAR:[0-9a-f]+]] g F .text 00000000 bar
# REG: <__start>:
# REG-NEXT: jalx 0x[[MIC]] <micro>
# RUN: llvm-readobj -r -A %t-out.so | FileCheck -check-prefix=SO %s
# DIS: 0000000000000000 l O .tdata 0000000000000000 loc
-# DIS: 0000000000000004 g O .tdata 0000000000000000 bar
# DIS: 0000000000000000 O *UND* 0000000000000000 foo
+# DIS: 0000000000000004 g O .tdata 0000000000000000 bar
# DIS: Contents of section .got:
# DIS-NEXT: 30000 00000000 00000000 80000000 00000000
# SO: Relocations [
# SO-NEXT: Section (7) .rel.dyn {
# SO-NEXT: 0x30030 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE -
-# SO-NEXT: 0x30018 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE bar
-# SO-NEXT: 0x30040 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE bar
-# SO-NEXT: 0x30048 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE bar
# SO-NEXT: 0x30010 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE foo
# SO-NEXT: 0x30020 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE foo
# SO-NEXT: 0x30028 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE foo
+# SO-NEXT: 0x30018 R_MIPS_TLS_TPREL64/R_MIPS_NONE/R_MIPS_NONE bar
+# SO-NEXT: 0x30040 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE bar
+# SO-NEXT: 0x30048 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE bar
# SO-NEXT: }
# SO-NEXT: ]
# SO: Primary GOT {
# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
# CHECK: SYMBOL TABLE:
-# CHECK: [[TGA:[0-9a-f]+]] g .text 00000000 __tls_get_addr
# CHECK: 00000000 g O .tdata 00000000 tls1
+# CHECK: [[TGA:[0-9a-f]+]] g .text 00000000 __tls_get_addr
#
# CHECK: Contents of section .data:
# CHECK-NEXT: {{.*}} [[TGA]] ffff8004 ffff9004
# RUN: llvm-readobj -r -A %t-out.so | FileCheck -check-prefix=SO %s
# DIS: 00000000 l O .tdata 00000000 loc
-# DIS: 00000004 g O .tdata 00000000 bar
# DIS: 00000000 O *UND* 00000000 foo
+# DIS: 00000004 g O .tdata 00000000 bar
# DIS: Contents of section .got:
# DIS-NEXT: 30000 00000000 80000000 00000000 ffff9004
# SO: Relocations [
# SO-NEXT: Section (7) .rel.dyn {
# SO-NEXT: 0x30018 R_MIPS_TLS_DTPMOD32 -
-# SO-NEXT: 0x3000C R_MIPS_TLS_TPREL32 bar
-# SO-NEXT: 0x30020 R_MIPS_TLS_DTPMOD32 bar
-# SO-NEXT: 0x30024 R_MIPS_TLS_DTPREL32 bar
# SO-NEXT: 0x30008 R_MIPS_TLS_TPREL32 foo
# SO-NEXT: 0x30010 R_MIPS_TLS_DTPMOD32 foo
# SO-NEXT: 0x30014 R_MIPS_TLS_DTPREL32 foo
+# SO-NEXT: 0x3000C R_MIPS_TLS_TPREL32 bar
+# SO-NEXT: 0x30020 R_MIPS_TLS_DTPMOD32 bar
+# SO-NEXT: 0x30024 R_MIPS_TLS_DTPREL32 bar
# SO-NEXT: }
# SO-NEXT: ]
# SO: Primary GOT {
// RUN: ld.lld %t -o %t2
// RUN: llvm-readobj --symbols %t2 | FileCheck %s
-// CHECK: Symbol {
-// CHECK: Name: bar_sym
+// CHECK: Name: foo_sym
// CHECK-NEXT: Value:
// CHECK-NEXT: Size:
// CHECK-NEXT: Binding:
// CHECK-NEXT: Type:
// CHECK-NEXT: Other:
-// CHECK-NEXT: Section: bar
+// CHECK-NEXT: Section: foo
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: foo_sym
+// CHECK-NEXT: Name: bar_sym
// CHECK-NEXT: Value:
// CHECK-NEXT: Size:
// CHECK-NEXT: Binding:
// CHECK-NEXT: Type:
// CHECK-NEXT: Other:
-// CHECK-NEXT: Section: foo
+// CHECK-NEXT: Section: bar
// CHECK-NEXT: }
.section foo
// CHECK-NEXT: Owner: GNU
// CHECK-NEXT: Data size:
// CHECK-NEXT: Type: NT_GNU_BUILD_ID (unique build ID bitstring)
-// CHECK-NEXT: Build ID: 08b93eab87177a2356d1b0d1148339463f98dac2
+// CHECK-NEXT: Build ID: bb5542bd74252653e286044980d602874d237ae0
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
// PART0: 0000000000000498 0 NOTYPE LOCAL HIDDEN {{.*}} __part_index_end
// PART-INDEX: Contents of section .dynstr:
-// PART-INDEX-NEXT: 03a8 00663100 66320070 30007061 72743100 .f1.f2.p0.part1.
+// PART-INDEX-NEXT: 03a8 00703000 66310066 32007061 72743100 .p0.f1.f2.part1.
// PART-INDEX: Contents of section .rodata:
// 0x48c + 0xffffff26 = 0x3b2
// 0x490 + 0x3b70 = 0x4000
// CHECK: [[P1]] f4
// CHECK: [[MAIN]] f5
// CHECK: [[P2]] f6
-// CHECK: [[MAIN]] _start
// CHECK: [[P1]] f1
// CHECK: [[P2]] f2
+// CHECK: [[MAIN]] _start
.section .llvm_sympart.f1,"",@llvm_sympart
.asciz "part1"
// st_other's PPC64 specific flags, thus we check the
// result of the hexdump of .symtab section.
-// CHECK: 0070 00000000 00000000 00000009 12600001
+// CHECK: 0060 00000003 12600001 00000000 00000000
## external function, a r12 setup stub is inserted.
# SYMBOL: Symbol table '.dynsym' contains 4 entries:
-# SYMBOL: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x60>] UND callee_global_TOC
-# SYMBOL-NEXT: 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND callee_global_stother0
-# SYMBOL-NEXT: 3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x20>] UND callee_global_stother1
+# SYMBOL: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND callee_global_stother0
+# SYMBOL-NEXT: 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x20>] UND callee_global_stother1
+# SYMBOL-NEXT: 3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x60>] UND callee_global_TOC
# SYMBOL: Symbol table '.symtab' contains 12 entries:
# SYMBOL: 2: 0000000010010000 0 NOTYPE LOCAL DEFAULT [<other: 0x20>] 6 caller1
# SYMBOL: 6: 0000000010010010 16 FUNC LOCAL DEFAULT 6 __plt_pcrel_callee_global_stother0
# SYMBOL-NEXT: 7: 0000000010020010 16 FUNC LOCAL DEFAULT 7 __plt_pcrel_callee_global_stother1
# SYMBOL-NEXT: 8: 0000000010030010 16 FUNC LOCAL DEFAULT 8 __plt_pcrel_callee_global_TOC
-# SYMBOL-NEXT: 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x60>] UND callee_global_TOC
-# SYMBOL-NEXT: 10: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND callee_global_stother0
-# SYMBOL-NEXT: 11: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x20>] UND callee_global_stother1
+# SYMBOL-NEXT: 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND callee_global_stother0
+# SYMBOL-NEXT: 10: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x20>] UND callee_global_stother1
+# SYMBOL-NEXT: 11: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [<other: 0x60>] UND callee_global_TOC
## DT_PLTGOT points to .plt
# SEC: .plt NOBITS 0000000010030148 040148 000028 00 WA 0 0 8
# IE-REL: .rela.dyn {
# IE-REL-NEXT: 0x204A0 R_PPC64_TPREL64 c 0x0
+# IE-REL-NEXT: 0x204A8 R_PPC64_TPREL64 s 0x0
# IE-REL-NEXT: 0x204B0 R_PPC64_TPREL64 i 0x0
# IE-REL-NEXT: 0x204B8 R_PPC64_TPREL64 l 0x0
-# IE-REL-NEXT: 0x204A8 R_PPC64_TPREL64 s 0x0
# IE-REL-NEXT: }
# INPUT-REL: R_PPC64_GOT_TPREL16_HA c 0x0
#--- asm
# GD-RELOC: Relocation section '.rela.dyn' at offset 0x100b8 contains 4 entries:
-# GD-RELOC: 0000000001001160 0000000200000044 R_PPC64_DTPMOD64 0000000000000000 x + 0
-# GD-RELOC: 0000000001001168 000000020000004e R_PPC64_DTPREL64 0000000000000000 x + 0
+# GD-RELOC: 0000000001001160 0000000100000044 R_PPC64_DTPMOD64 0000000000000000 x + 0
+# GD-RELOC: 0000000001001168 000000010000004e R_PPC64_DTPREL64 0000000000000000 x + 0
# GD-RELOC: 0000000001001170 0000000300000044 R_PPC64_DTPMOD64 0000000000000000 y + 0
# GD-RELOC: 0000000001001178 000000030000004e R_PPC64_DTPREL64 0000000000000000 y + 0
# GD-SYM: Symbol table '.dynsym' contains 4 entries:
-# GD-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND x
-# GD-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT UND y
+# GD-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT UND x
+# GD-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT UND y
# GDTOIE-RELOC: Relocation section '.rela.dyn' at offset 0x{{.*}} contains 2 entries:
-# GDTOIE-RELOC: 00000000010010e0 0000000200000049 R_PPC64_TPREL64 0000000000000000 x + 0
+# GDTOIE-RELOC: 00000000010010e0 0000000100000049 R_PPC64_TPREL64 0000000000000000 x + 0
# GDTOIE-RELOC: 00000000010010e8 0000000300000049 R_PPC64_TPREL64 0000000000000000 y + 0
# GDTOIE-SYM: Symbol table '.dynsym' contains 4 entries:
-# GDTOIE-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND x
-# GDTOIE-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT UND y
+# GDTOIE-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT UND x
+# GDTOIE-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT UND y
# GDTOLE-RELOC: There are no relocations in this file.
# GDTOLE-SYM: Symbol table '.symtab' contains 5 entries:
-# GDTOLE-SYM: 3: 0000000000000000 0 TLS GLOBAL DEFAULT 3 x
-# GDTOLE-SYM: 4: 0000000000000004 0 TLS GLOBAL DEFAULT 3 y
+# GDTOLE-SYM: 0000000000000000 0 TLS GLOBAL DEFAULT 3 x
+# GDTOLE-SYM: 0000000000000004 0 TLS GLOBAL DEFAULT 3 y
# GD-LABEL: <GDTwoVal>:
# GD-NEXT: paddi 3, 0, 352, 1
// CHECK-LABEL: Symbol table '.symtab'
// CHECK: Value Size Type Bind Vis Ndx Name
-// CHECK: [[# FINI_ADDR + FINI_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_end
-// CHECK-NEXT: [[# FINI_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_start
-// CHECK-NEXT: [[# INIT_ADDR + INIT_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_end
-// CHECK-NEXT: [[# INIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_start
+// CHECK: [[# PREINIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_start
// CHECK-NEXT: [[# PREINIT_ADDR + PREINIT_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_end
-// CHECK-NEXT: [[# PREINIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __preinit_array_start
+// CHECK-NEXT: [[# INIT_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_start
+// CHECK-NEXT: [[# INIT_ADDR + INIT_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __init_array_end
+// CHECK-NEXT: [[# FINI_ADDR]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_start
+// CHECK-NEXT: [[# FINI_ADDR + FINI_SIZE]] 0 NOTYPE LOCAL HIDDEN [[#]] __fini_array_end
// DISASM: SYMBOL TABLE:
// DISASM-DAG: {{0*}}[[# %x, PREINIT_ARRAY_START:]] l .preinit_array {{0+}} .hidden __preinit_array_start
# KEEP_START: Symbol table '.symtab' contains 10 entries:
# KEEP_START: 5: {{.*}} SECTION
-# KEEP_START-NEXT: 6: {{.*}} UND __start_qux
-# KEEP_START-NEXT: 7: {{.*}} 1 _start
-# KEEP_START-NEXT: 8: {{.*}} 5 fred
+# KEEP_START-NEXT: 6: {{.*}} 1 _start
+# KEEP_START-NEXT: 7: {{.*}} 5 fred
+# KEEP_START-NEXT: 8: {{.*}} UND __start_qux
# KEEP_START-NEXT: 9: {{.*}} UND fred_und
.section qux,"a",@progbits
// CHECK-NEXT: Section: .text (0x1)
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rel_iplt_end (1)
+// CHECK-NEXT: Name: __rel_iplt_start (1)
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Weak (0x2)
// CHECK-NEXT: Section: Undefined (0x0)
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: __rel_iplt_start (16)
+// CHECK-NEXT: Name: __rel_iplt_end (18)
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Weak (0x2)
# SYMBOL-NEXT: 0x38 R_X86_64_PC32 __fini_array_end 0xFFFFFFFFFFFFFFFC
# SYMBOL-NEXT: }
# SYMBOL-NEXT: ]
-# SYMBOL: Symbol {
-# SYMBOL: Name: __fini_array_end
+
+# SYMBOL: Name: __start_foo
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __fini_array_start
+# SYMBOL-NEXT: Name: __stop_foo
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __init_array_end
+# SYMBOL-NEXT: Name: __start_bar
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __init_array_start
+# SYMBOL-NEXT: Name: __stop_bar
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __preinit_array_end
+# SYMBOL-NEXT: Name: __start_doo
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __preinit_array_start
+# SYMBOL-NEXT: Name: __stop_doo
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __start_bar
+# SYMBOL-NEXT: Name: __preinit_array_start
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __start_doo
+# SYMBOL-NEXT: Name: __preinit_array_end
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __start_foo
+# SYMBOL-NEXT: Name: __init_array_start
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __stop_bar
+# SYMBOL-NEXT: Name: __init_array_end
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Other: 0
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
-# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __stop_doo
+# SYMBOL: Symbol {
+# SYMBOL-NEXT: Name: __fini_array_start
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
# SYMBOL-NEXT: Section: Undefined
# SYMBOL-NEXT: }
# SYMBOL-NEXT: Symbol {
-# SYMBOL-NEXT: Name: __stop_foo
+# SYMBOL-NEXT: Name: __fini_array_end
# SYMBOL-NEXT: Value: 0x0
# SYMBOL-NEXT: Size: 0
# SYMBOL-NEXT: Binding: Global
// CHECK: Symbol table '.symtab' contains 34 entries:
// CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
// CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-// CHECK-NEXT: 1: 00000000002021ec 63 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_CommonStrong
-// CHECK-NEXT: 2: 000000000020222c 30 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_CommonWeak
-// CHECK-NEXT: 3: 00000000002011cc 55 NOTYPE GLOBAL DEFAULT 1 CommonStrong_with_RegularStrong
-// CHECK-NEXT: 4: 000000000020224c 22 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_RegularWeak
-// CHECK-NEXT: 5: 0000000000202264 27 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefStrong
-// CHECK-NEXT: 6: 0000000000202280 26 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefWeak
-// CHECK-NEXT: 7: 000000000020229c 61 OBJECT GLOBAL DEFAULT 2 CommonWeak_with_CommonStrong
-// CHECK-NEXT: 8: 00000000002022dc 28 OBJECT WEAK DEFAULT 2 CommonWeak_with_CommonWeak
-// CHECK-NEXT: 9: 00000000002011cc 53 NOTYPE GLOBAL DEFAULT 1 CommonWeak_with_RegularStrong
-// CHECK-NEXT: 10: 00000000002022f8 20 OBJECT WEAK DEFAULT 2 CommonWeak_with_RegularWeak
-// CHECK-NEXT: 11: 000000000020230c 25 OBJECT WEAK DEFAULT 2 CommonWeak_with_UndefStrong
-// CHECK-NEXT: 12: 0000000000202328 24 OBJECT WEAK DEFAULT 2 CommonWeak_with_UndefWeak
-// CHECK-NEXT: 13: 0000000000201159 10 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_CommonStrong
-// CHECK-NEXT: 14: 0000000000201159 9 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_CommonWeak
-// CHECK-NEXT: 15: 0000000000201159 2 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_RegularWeak
-// CHECK-NEXT: 16: 0000000000201159 6 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefStrong
-// CHECK-NEXT: 17: 0000000000201159 5 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefWeak
-// CHECK-NEXT: 18: 0000000000202340 40 OBJECT GLOBAL DEFAULT 2 RegularWeak_with_CommonStrong
-// CHECK-NEXT: 19: 0000000000201159 7 NOTYPE WEAK DEFAULT 1 RegularWeak_with_CommonWeak
-// CHECK-NEXT: 20: 00000000002011a4 33 NOTYPE GLOBAL DEFAULT 1 RegularWeak_with_RegularStrong
-// CHECK-NEXT: 21: 0000000000201159 0 NOTYPE WEAK DEFAULT 1 RegularWeak_with_RegularWeak
-// CHECK-NEXT: 22: 0000000000201159 4 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefStrong
-// CHECK-NEXT: 23: 0000000000201159 3 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefWeak
-// CHECK-NEXT: 24: 0000000000202368 51 OBJECT GLOBAL DEFAULT 2 UndefStrong_with_CommonStrong
-// CHECK-NEXT: 25: 000000000020239c 50 OBJECT WEAK DEFAULT 2 UndefStrong_with_CommonWeak
-// CHECK-NEXT: 26: 00000000002011c4 46 NOTYPE GLOBAL DEFAULT 1 UndefStrong_with_RegularStrong
-// CHECK-NEXT: 27: 00000000002011c4 45 NOTYPE WEAK DEFAULT 1 UndefStrong_with_RegularWeak
-// CHECK-NEXT: 28: 00000000002023d0 49 OBJECT GLOBAL DEFAULT 2 UndefWeak_with_CommonStrong
-// CHECK-NEXT: 29: 0000000000202404 48 OBJECT WEAK DEFAULT 2 UndefWeak_with_CommonWeak
-// CHECK-NEXT: 30: 00000000002011c4 44 NOTYPE GLOBAL DEFAULT 1 UndefWeak_with_RegularStrong
-// CHECK-NEXT: 31: 00000000002011c4 43 NOTYPE WEAK DEFAULT 1 UndefWeak_with_RegularWeak
-// CHECK-NEXT: 32: 0000000000000000 0 NOTYPE WEAK DEFAULT UND UndefWeak_with_UndefWeak
-// CHECK-NEXT: 33: 0000000000201158 0 NOTYPE GLOBAL DEFAULT 1 _start
+// CHECK-NEXT: 1: 0000000000201158 0 NOTYPE GLOBAL DEFAULT 1 _start
+// CHECK-NEXT: 2: 0000000000201159 0 NOTYPE WEAK DEFAULT 1 RegularWeak_with_RegularWeak
+// CHECK-NEXT: 3: 00000000002011a4 33 NOTYPE GLOBAL DEFAULT 1 RegularWeak_with_RegularStrong
+// CHECK-NEXT: 4: 0000000000201159 2 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_RegularWeak
+// CHECK-NEXT: 5: 0000000000201159 3 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefWeak
+// CHECK-NEXT: 6: 0000000000201159 4 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefStrong
+// CHECK-NEXT: 7: 0000000000201159 5 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefWeak
+// CHECK-NEXT: 8: 0000000000201159 6 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefStrong
+// CHECK-NEXT: 9: 0000000000201159 7 NOTYPE WEAK DEFAULT 1 RegularWeak_with_CommonWeak
+// CHECK-NEXT: 10: 00000000002021ec 40 OBJECT GLOBAL DEFAULT 2 RegularWeak_with_CommonStrong
+// CHECK-NEXT: 11: 0000000000201159 9 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_CommonWeak
+// CHECK-NEXT: 12: 0000000000201159 10 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_CommonStrong
+// CHECK-NEXT: 13: 00000000002011c4 43 NOTYPE WEAK DEFAULT 1 UndefWeak_with_RegularWeak
+// CHECK-NEXT: 14: 00000000002011c4 44 NOTYPE GLOBAL DEFAULT 1 UndefWeak_with_RegularStrong
+// CHECK-NEXT: 15: 00000000002011c4 45 NOTYPE WEAK DEFAULT 1 UndefStrong_with_RegularWeak
+// CHECK-NEXT: 16: 00000000002011c4 46 NOTYPE GLOBAL DEFAULT 1 UndefStrong_with_RegularStrong
+// CHECK-NEXT: 17: 0000000000000000 0 NOTYPE WEAK DEFAULT UND UndefWeak_with_UndefWeak
+// CHECK-NEXT: 18: 0000000000202214 48 OBJECT WEAK DEFAULT 2 UndefWeak_with_CommonWeak
+// CHECK-NEXT: 19: 0000000000202244 49 OBJECT GLOBAL DEFAULT 2 UndefWeak_with_CommonStrong
+// CHECK-NEXT: 20: 0000000000202278 50 OBJECT WEAK DEFAULT 2 UndefStrong_with_CommonWeak
+// CHECK-NEXT: 21: 00000000002022ac 51 OBJECT GLOBAL DEFAULT 2 UndefStrong_with_CommonStrong
+// CHECK-NEXT: 22: 00000000002022e0 20 OBJECT WEAK DEFAULT 2 CommonWeak_with_RegularWeak
+// CHECK-NEXT: 23: 00000000002011cc 53 NOTYPE GLOBAL DEFAULT 1 CommonWeak_with_RegularStrong
+// CHECK-NEXT: 24: 00000000002022f4 22 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_RegularWeak
+// CHECK-NEXT: 25: 00000000002011cc 55 NOTYPE GLOBAL DEFAULT 1 CommonStrong_with_RegularStrong
+// CHECK-NEXT: 26: 000000000020230c 24 OBJECT WEAK DEFAULT 2 CommonWeak_with_UndefWeak
+// CHECK-NEXT: 27: 0000000000202324 25 OBJECT WEAK DEFAULT 2 CommonWeak_with_UndefStrong
+// CHECK-NEXT: 28: 0000000000202340 26 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefWeak
+// CHECK-NEXT: 29: 000000000020235c 27 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefStrong
+// CHECK-NEXT: 30: 0000000000202378 28 OBJECT WEAK DEFAULT 2 CommonWeak_with_CommonWeak
+// CHECK-NEXT: 31: 0000000000202394 61 OBJECT GLOBAL DEFAULT 2 CommonWeak_with_CommonStrong
+// CHECK-NEXT: 32: 00000000002023d4 30 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_CommonWeak
+// CHECK-NEXT: 33: 00000000002023f4 63 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_CommonStrong
.globl _start
_start:
# CHECK-NEXT: Section:
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: bar
+# CHECK-NEXT: Name: und
# CHECK-NEXT: Value:
# CHECK-NEXT: Size:
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
-# CHECK-NEXT: Section: .text
+# CHECK-NEXT: Section: Undefined
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: foo
# CHECK-NEXT: Section: .text
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: und
+# CHECK-NEXT: Name: bar
# CHECK-NEXT: Value:
# CHECK-NEXT: Size:
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
-# CHECK-NEXT: Section: Undefined
+# CHECK-NEXT: Section: .text
# CHECK-NEXT: }
# CHECK-NEXT: ]
// RUN: ld.lld -o %t3 %t1.o %t2.o %t3.o
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=TEST1 %s
-// TEST1: Name: bar
// TEST1: Name: foo
+// TEST1: Name: bar
// RUN: ld.lld -o %t3 %t1.o -u bar --start-lib %t2.o %t3.o
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=TEST2 %s
-// TEST2: Name: bar
// TEST2-NOT: Name: foo
+// TEST2: Name: bar
// RUN: ld.lld -o %t3 %t1.o --start-lib %t2.o %t3.o
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=TEST3 %s
-// TEST3-NOT: Name: bar
// TEST3-NOT: Name: foo
+// TEST3-NOT: Name: bar
// RUN: not ld.lld %t1.o --start-lib --start-lib 2>&1 | FileCheck -check-prefix=NESTED-LIB %s
// NESTED-LIB: nested --start-lib
// SYMBOL-NEXT: ]
// SYMBOL: Symbol {
-// SYMBOL: Name: __start_bar
-// SYMBOL: Value: 0x1342
-// SYMBOL: STV_HIDDEN
-// SYMBOL: Section: bar
-// SYMBOL: }
-// SYMBOL-NOT: Section: __stop_bar
-// SYMBOL: Symbol {
// SYMBOL: Name: __start_foo
// SYMBOL: Value: 0x133F
// SYMBOL: STV_HIDDEN
// SYMBOL: STV_HIDDEN
// SYMBOL: Section: foo
// SYMBOL: }
-
// SYMBOL: Symbol {
-// SYMBOL: Name: __stop_zed1
-// SYMBOL: Value: 0x3408
-// SYMBOL: STV_PROTECTED
-// SYMBOL: Section: zed1
+// SYMBOL: Name: __start_bar
+// SYMBOL: Value: 0x1342
+// SYMBOL: STV_HIDDEN
+// SYMBOL: Section: bar
// SYMBOL: }
+// SYMBOL-NOT: Section: __stop_bar
+
// SYMBOL: Symbol {
// SYMBOL: Name: __stop_zed2
// SYMBOL: Value: 0x3418
// SYMBOL: STV_PROTECTED
// SYMBOL: Section: zed2
// SYMBOL: }
+// SYMBOL: Symbol {
+// SYMBOL: Name: __stop_zed1
+// SYMBOL: Value: 0x3408
+// SYMBOL: STV_PROTECTED
+// SYMBOL: Section: zed1
+// SYMBOL: }
.hidden __start_foo
.hidden __stop_foo
# WARN-NOT: warning:
# SAMESYM: warning: {{.*}}.txt: duplicate ordered symbol: _start
# WARN-NOT: warning:
-# SYNTHETIC: warning: <internal>: unable to order synthetic symbol: _GLOBAL_OFFSET_TABLE_
+# SHARED: warning: {{.*}}.so: unable to order shared symbol: shared
# WARN-NOT: warning:
# DISCARD: warning: {{.*}}1.o: unable to order discarded symbol: discard
# WARN-NOT: warning:
# GC: warning: {{.*}}1.o: unable to order discarded symbol: gc
# WARN-NOT: warning:
-# SHARED: warning: {{.*}}.so: unable to order shared symbol: shared
+# SYNTHETIC: warning: <internal>: unable to order synthetic symbol: _GLOBAL_OFFSET_TABLE_
# WARN-NOT: warning:
# UNDEFINED: warning: {{.*}}3.o: unable to order undefined symbol: undefined
# WARN-NOT: warning:
// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: abs
-// CHECK-NEXT: Value: 0x123
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x201160
// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
+// CHECK-NEXT: Binding: Weak (0x2)
+// CHECK-NEXT: Type: Object
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: bar
// CHECK-NEXT: Section: Undefined (0x0)
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: common
-// CHECK-NEXT: Value: 0x202164
-// CHECK-NEXT: Size: 4
-// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Name: zed
+// CHECK-NEXT: Value: 0x200158
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: .bss
+// CHECK-NEXT: Section: foobar
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: foo
-// CHECK-NEXT: Value: 0x201160
+// CHECK-NEXT: Name: zed2
+// CHECK-NEXT: Value: 0x20015C
// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Weak (0x2)
-// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: .text
+// CHECK-NEXT: Section: foobar
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: protected
+// CHECK-NEXT: Name: zed3
// CHECK-NEXT: Value: 0x200160
-// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Size: 4
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other [ (0x3)
-// CHECK-NEXT: STV_PROTECTED
-// CHECK-NEXT: ]
+// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: foobar
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: zed
-// CHECK-NEXT: Value: 0x200158
+// CHECK-NEXT: Name: abs
+// CHECK-NEXT: Value: 0x123
// CHECK-NEXT: Size: 0
-// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: Section: Absolute
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: zed2
-// CHECK-NEXT: Value: 0x20015C
-// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Name: common
+// CHECK-NEXT: Value: 0x202164
+// CHECK-NEXT: Size: 4
// CHECK-NEXT: Binding: Global
-// CHECK-NEXT: Type: None
+// CHECK-NEXT: Type: Object
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: Section: .bss
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: zed3
+// CHECK-NEXT: Name: protected
// CHECK-NEXT: Value: 0x200160
-// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
-// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Other [ (0x3)
+// CHECK-NEXT: STV_PROTECTED
+// CHECK-NEXT: ]
// CHECK-NEXT: Section: foobar
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: 0x203420 R_X86_64_JUMP_SLOT set_data 0x0
// CHECK-NEXT: }
-// CHECK: Name: foo
-// CHECK-NEXT: Value: 0x0
+// CHECK: Name: set_data
+// CHECK-NEXT: Value: 0x2012F0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Function
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Undefined
-// CHECK: Name: set_data
-// CHECK-NEXT: Value: 0x2012F0
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Function
# DSO-NEXT: Section: Undefined
# DSO-NEXT: }
# DSO-NEXT: Symbol {
-# DSO-NEXT: Name: a@@V1
-# DSO-NEXT: Value: 0x12E8
+# DSO-NEXT: Name: b@V1
+# DSO-NEXT: Value: 0x12E9
# DSO-NEXT: Size: 0
# DSO-NEXT: Binding: Global
# DSO-NEXT: Type: Function
# DSO-NEXT: Section: .text
# DSO-NEXT: }
# DSO-NEXT: Symbol {
-# DSO-NEXT: Name: b@V1
-# DSO-NEXT: Value: 0x12E9
+# DSO-NEXT: Name: a@@V1
+# DSO-NEXT: Value: 0x12E8
# DSO-NEXT: Size: 0
# DSO-NEXT: Binding: Global
# DSO-NEXT: Type: Function
# DSO-NEXT: }
# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 2
-# DSO-NEXT: Name: a@@V1
+# DSO-NEXT: Name: b@V1
# DSO-NEXT: }
# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 3
# DSO-NEXT: }
# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 2
-# DSO-NEXT: Name: b@V1
+# DSO-NEXT: Name: a@@V1
# DSO-NEXT: }
# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 3
# ERROR: invalid glob pattern: a[
.text
-.globl _Z3abci
-.type _Z3abci,@function
-_Z3abci:
-retq
-
.globl _Z3abbi
.type _Z3abbi,@function
_Z3abbi:
retq
+
+.globl _Z3abci
+.type _Z3abci,@function
+_Z3abci:
+retq
# RUN: llvm-readobj --dyn-syms %t.so | FileCheck %s --check-prefix=NOMATCH
# NOMATCH: DynamicSymbols [
-# NOMATCH-NOT: _Z3aaaPf@@FOO
# NOMATCH-NOT: _Z3aaaPi@@FOO
+# NOMATCH-NOT: _Z3aaaPf@@FOO
# NOMATCH: ]
# RUN: echo "FOO { global: extern \"C++\" { \"aaa*\"; aaa*; }; };" > %t2.script
# RUN: ld.lld --version-script %t2.script -shared %t.o -o %t2.so
# RUN: llvm-readobj --dyn-syms %t2.so | FileCheck %s --check-prefix=MATCH
# MATCH: DynamicSymbols [
-# MATCH: _Z3aaaPf@@FOO
# MATCH: _Z3aaaPi@@FOO
+# MATCH: _Z3aaaPf@@FOO
# MATCH: ]
.text
# CHECK-NEXT: }
# CHECK-NEXT: ]
-.global _Z3fooi
-_Z3fooi:
.global _Z3bari
_Z3bari:
-.global _Z3zedi
-_Z3zedi:
.global _Z3bazi
_Z3bazi:
+.global _Z3fooi
+_Z3fooi:
+.global _Z3zedi
+_Z3zedi:
.global _ZSt3qux
_ZSt3qux:
# RUN: llvm-readobj -V --dyn-syms %t.so | FileCheck %s
# CHECK: VersionSymbols [
-# CHECK: Name: _Z3bari
# CHECK: Name: _Z3fooi@@FOO
+# CHECK: Name: _Z3bari
# CHECK: Name: _Z3zedi@@BAR
.text
# DSO-NEXT: Section: Undefined
# DSO-NEXT: }
# DSO-NEXT: Symbol {
-# DSO-NEXT: Name: _Z3bari@@LIBSAMPLE_2.0
+# DSO-NEXT: Name: _Z3fooi@@LIBSAMPLE_1.0
# DSO-NEXT: Value:
# DSO-NEXT: Size: 0
# DSO-NEXT: Binding: Global
# DSO-NEXT: Section: .text
# DSO-NEXT: }
# DSO-NEXT: Symbol {
-# DSO-NEXT: Name: _Z3fooi@@LIBSAMPLE_1.0
+# DSO-NEXT: Name: _Z3bari@@LIBSAMPLE_2.0
# DSO-NEXT: Value:
# DSO-NEXT: Size: 0
# DSO-NEXT: Binding: Global
# DSO-NEXT: Name:
# DSO-NEXT: }
# DSO-NEXT: Symbol {
-# DSO-NEXT: Version: 3
-# DSO-NEXT: Name: _Z3bari@@LIBSAMPLE_2.0
-# DSO-NEXT: }
-# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 2
# DSO-NEXT: Name: _Z3fooi@@LIBSAMPLE_1.0
# DSO-NEXT: }
# DSO-NEXT: Symbol {
+# DSO-NEXT: Version: 3
+# DSO-NEXT: Name: _Z3bari@@LIBSAMPLE_2.0
+# DSO-NEXT: }
+# DSO-NEXT: Symbol {
# DSO-NEXT: Version: 2
# DSO-NEXT: Name: _Z3zedi@@LIBSAMPLE_1.0
# DSO-NEXT: }
zed1:
local:
-# CHECK: bar1{{$}}
-# CHECK-NEXT: foo1{{$}}
+# CHECK: foo1{{$}}
+# CHECK-NEXT: bar1{{$}}
# CHECK-NOT: {{.}}
# RUN: echo "{ global : local; local: *; };" > %t1.script
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
# RUN: llvm-readobj --dyn-syms %t.so | FileCheck --check-prefix=EXACT %s
# EXACT: DynamicSymbols [
-# EXACT: _start
# EXACT-NOT: foo1
# EXACT: foo2
# EXACT: foo3
+# EXACT: _start
# RUN: echo "VERSION_1.0 { local: foo*; };" > %t.script
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
# RUN: llvm-readobj --dyn-syms %t.so | FileCheck --check-prefix=WC %s
# WC: DynamicSymbols [
-# WC: _start
# WC-NOT: foo1
# WC-NOT: foo2
# WC-NOT: foo3
+# WC: _start
# RUN: echo "VERSION_1.0 { global: *; local: foo*; };" > %t.script
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
# RUN: llvm-readobj --dyn-syms %t.so | FileCheck --check-prefix=MIX %s
# MIX: DynamicSymbols [
-# MIX: _start@@VERSION_1.0
# MIX-NOT: foo1
# MIX-NOT: foo2
# MIX-NOT: foo3
+# MIX: _start@@VERSION_1.0
.globl foo1
foo1:
# CHECK-NEXT: Name:
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Version: 3
-# CHECK-NEXT: Name: foo@@VER2
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
# CHECK-NEXT: Version: 2
# CHECK-NEXT: Name: foo@VER1
# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Version: 3
+# CHECK-NEXT: Name: foo@@VER2
+# CHECK-NEXT: }
# CHECK-NEXT: ]
.global bar
# RUN: ld.lld --hash-style=sysv --version-script %t2.script -shared %t.o %t2.so -o %t.so
# RUN: llvm-readelf --dyn-syms %t.so | FileCheck --check-prefix=ALL %s
-# ALL: _start{{$}}
+# ALL: foo1{{$}}
# ALL-NEXT: bar{{$}}
-# ALL-NEXT: foo1{{$}}
# ALL-NEXT: foo2{{$}}
# ALL-NEXT: foo3{{$}}
+# ALL-NEXT: _start{{$}}
# ALL-NOT: {{.}}
# RUN: echo "VERSION_1.0 { global: foo1; foo1; local: *; };" > %t8.script
// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %S/Inputs/vs-diagnostics-duplicate3.s -o %t3.o
// RUN: not ld.lld --vs-diagnostics %t1.o %t2.o %t3.o -o /dev/null 2>&1 | FileCheck %s
-// Case 1. Both symbols have full source location.
+// Case 1. The source locations are unknown for both symbols.
+// CHECK: {{.*}}ld.lld{{.*}}: error: duplicate symbol: foo
+// CHECK-NEXT: >>> defined at {{.*}}1.o:(.text+0x{{.+}})
+// CHECK-NEXT: >>> defined at {{.*}}2.o:(.text+0x{{.+}})
+
+// Case 2. Both symbols have full source location.
// CHECK: duplicate.s(15): error: duplicate symbol: bar
// CHECK-NEXT: >>> defined at duplicate.s:15
// CHECK-NEXT: >>>{{.*}}1.o:(.text+0x{{.+}})
// CHECK-NEXT: >>> defined at duplicate2.s:20
// CHECK-NEXT: >>>{{.*}}2.o:(.text+0x{{.+}})
-// Case 2. The source locations are unknown for both symbols.
-// CHECK: {{.*}}ld.lld{{.*}}: error: duplicate symbol: foo
-// CHECK-NEXT: >>> defined at {{.*}}1.o:(.text+0x{{.+}})
-// CHECK-NEXT: >>> defined at {{.*}}2.o:(.text+0x{{.+}})
-
// Case 3. For the second definition of `baz` we know only the source file found in a STT_FILE symbol.
// CHECK: duplicate.s(30): error: duplicate symbol: baz
// CHECK-NEXT: >>> defined at duplicate.s:30
// CHECK-NEXT: movq {{.*}}(%rip), %rbx # 2021a8
// CHECK-NEXT: movq {{.*}}(%rip), %rcx # 2021b0
-// READELF: 0000000000011010 0 NOTYPE GLOBAL DEFAULT ABS __wrap_foo
// READELF: 0000000000011000 0 NOTYPE GLOBAL DEFAULT ABS foo
+// READELF: 0000000000011010 0 NOTYPE GLOBAL DEFAULT ABS __wrap_foo
// READELF: Hex dump of section '.got':
// READELF-NEXT: 0x[[#%x,ADDR:]] 10100100 00000000 00100100 00000000
# RELOC: Relocations [
# RELOC-NEXT: Section ({{.*}}) .rela.dyn {
-# RELOC-NEXT: R_X86_64_GLOB_DAT dsofoo 0x0
# RELOC-NEXT: R_X86_64_GLOB_DAT foo 0x0
# RELOC-NEXT: R_X86_64_GLOB_DAT und 0x0
+# RELOC-NEXT: R_X86_64_GLOB_DAT dsofoo 0x0
# RELOC-NEXT: }
# RELOC-NEXT: ]
// CHECK: Relocations [
// CHECK-NEXT: Section (5) .rela.dyn {
-// CHECK-NEXT: 0x2023C8 R_X86_64_TPOFF64 tls0 0x0
// CHECK-NEXT: [[ADDR]] R_X86_64_TPOFF64 tls1 0x0
+// CHECK-NEXT: 0x2023C8 R_X86_64_TPOFF64 tls0 0x0
// CHECK-NEXT: }
// CHECK-NEXT: ]
StrTabBuilder.finalize();
- // Symbols are required to be in lexicographic order.
- array_pod_sort(ExternalSymbolData.begin(), ExternalSymbolData.end());
-
// Make the first STT_FILE precede previous local symbols.
unsigned Index = 1;
auto FileNameIt = FileNames.begin();
; ELF-NEXT: ]
; ELF: Symbol {
-; ELF: Name: lds.defined
-; ELF-NEXT: Value: 0x8
-; ELF-NEXT: Size: 32
+; ELF: Name: lds.external
+; ELF-NEXT: Value: 0x4
+; ELF-NEXT: Size: 0
; ELF-NEXT: Binding: Global (0x1)
; ELF-NEXT: Type: Object (0x1)
; ELF-NEXT: Other: 0
; ELF-NEXT: }
; ELF: Symbol {
-; ELF: Name: lds.external
-; ELF-NEXT: Value: 0x4
-; ELF-NEXT: Size: 0
+; ELF: Name: lds.defined
+; ELF-NEXT: Value: 0x8
+; ELF-NEXT: Size: 32
; ELF-NEXT: Binding: Global (0x1)
; ELF-NEXT: Type: Object (0x1)
; ELF-NEXT: Other: 0
; Check that 'barAlias' and 'varAlias' produced as undefined.
; RUN: llvm-readelf --symbols %t2.o.1 | FileCheck %s --check-prefix=SYMBOLS
+; SYMBOLS: FUNC GLOBAL DEFAULT 2 zed
; SYMBOLS: NOTYPE GLOBAL DEFAULT UND barAlias
; SYMBOLS: NOTYPE GLOBAL DEFAULT UND varAlias
-; SYMBOLS: FUNC GLOBAL DEFAULT 2 zed
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; RUN: llvm-readelf --symbols %t3.o.1 | FileCheck %s --check-prefix=SYMBOLS
; Check that 'foo' and 'bar' produced as undefined.
-; SYMBOLS: NOTYPE GLOBAL DEFAULT UND bar
-; SYMBOLS: NOTYPE GLOBAL DEFAULT UND foo
; SYMBOLS: FUNC GLOBAL DEFAULT 2 zed
+; SYMBOLS: NOTYPE GLOBAL DEFAULT UND foo
+; SYMBOLS: NOTYPE GLOBAL DEFAULT UND bar
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
// SYMS: Type Bind Vis Ndx Name
// SYMS: NOTYPE LOCAL DEFAULT 3 $d.0
// SYMS-NEXT: FUNC GLOBAL DEFAULT 3 aarch64_size
-// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND also_double_word
-// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND double_word
-// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND full_word
// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND half_word
+// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND full_word
+// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND double_word
+// SYMS-NEXT: NOTYPE GLOBAL DEFAULT UND also_double_word
// CHECK-NEXT: }
// CHECK: Symbol {
-// CHECK: Name: lds1 (49)
-// CHECK-NEXT: Value: 0x8
-// CHECK-NEXT: Size: 387
+// CHECK: Name: lds4 (39)
+// CHECK-NEXT: Value: 0x4
+// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global (0x1)
// CHECK-NEXT: Type: Object (0x1)
// CHECK-NEXT: Other: 0
// CHECK-NEXT: }
// CHECK: Symbol {
-// CHECK: Name: lds2 (44)
-// CHECK-NEXT: Value: 0x4
-// CHECK-NEXT: Size: 12
+// CHECK: Name: lds1 (49)
+// CHECK-NEXT: Value: 0x8
+// CHECK-NEXT: Size: 387
// CHECK-NEXT: Binding: Global (0x1)
// CHECK-NEXT: Type: Object (0x1)
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Processor Specific (0xFF00)
// CHECK-NEXT: }
-// CHECK-NOT: Name: lds3
-
// CHECK: Symbol {
-// CHECK: Name: lds4 (39)
+// CHECK: Name: lds2 (44)
// CHECK-NEXT: Value: 0x4
-// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Size: 12
// CHECK-NEXT: Binding: Global (0x1)
// CHECK-NEXT: Type: Object (0x1)
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Processor Specific (0xFF00)
// CHECK-NEXT: }
+
+// CHECK-NOT: Name: lds3
@ CHECK-NEXT: Section: .text
@ CHECK-NEXT: }
@ CHECK-NEXT: Symbol {
-@ CHECK-NEXT: Name: bar2@zed
-@ CHECK-NEXT: Value: 0x0
+@ CHECK-NEXT: Name: global1
+@ CHECK-NEXT: Value: 0x14
@ CHECK-NEXT: Size: 0
@ CHECK-NEXT: Binding: Global (0x1)
@ CHECK-NEXT: Type: None (0x0)
@ CHECK-NEXT: Other: 0
-@ CHECK-NEXT: Section: Undefined (0x0)
+@ CHECK-NEXT: Section: .text
@ CHECK-NEXT: }
@ CHECK-NEXT: Symbol {
-@ CHECK-NEXT: Name: bar6@zed
+@ CHECK-NEXT: Name: bar2@zed
@ CHECK-NEXT: Value: 0x0
@ CHECK-NEXT: Size: 0
@ CHECK-NEXT: Binding: Global (0x1)
@ CHECK-NEXT: Section: Undefined (0x0)
@ CHECK-NEXT: }
@ CHECK-NEXT: Symbol {
-@ CHECK-NEXT: Name: g1@@zed
-@ CHECK-NEXT: Value: 0x14
+@ CHECK-NEXT: Name: bar6@zed
+@ CHECK-NEXT: Value: 0x0
@ CHECK-NEXT: Size: 0
@ CHECK-NEXT: Binding: Global (0x1)
@ CHECK-NEXT: Type: None (0x0)
@ CHECK-NEXT: Other: 0
-@ CHECK-NEXT: Section: .text
+@ CHECK-NEXT: Section: Undefined (0x0)
@ CHECK-NEXT: }
@ CHECK-NEXT: Symbol {
-@ CHECK-NEXT: Name: global1
+@ CHECK-NEXT: Name: g1@@zed
@ CHECK-NEXT: Value: 0x14
@ CHECK-NEXT: Size: 0
@ CHECK-NEXT: Binding: Global (0x1)
@@ make sure foo and bar are thumb function: bit 0 = 1 (st_value)
@CHECK: Symbol {
-@CHECK: Name: bar
+@CHECK: Name: foo
@CHECK-NEXT: Value: 0x1
@CHECK-NEXT: Size: 0
@CHECK-NEXT: Binding: Global
@CHECK-NEXT: Type: Function
@CHECK: Symbol {
-@CHECK: Name: baz
-@CHECK-NEXT: Value: 0x3
+@CHECK: Name: bar
+@CHECK-NEXT: Value: 0x1
@CHECK-NEXT: Size: 0
@CHECK-NEXT: Binding: Global
@CHECK-NEXT: Type: Function
@CHECK: Symbol {
-@CHECK: Name: foo
-@CHECK-NEXT: Value: 0x1
+@CHECK: Name: baz
+@CHECK-NEXT: Value: 0x3
@CHECK-NEXT: Size: 0
@CHECK-NEXT: Binding: Global
@CHECK-NEXT: Type: Function
//CHECK: Section: my_bss.2 (0x12)
//CHECK: }
//CHECK: Symbol {
-//CHECK: Name: a
-//CHECK: Section: my_bss.1 (0xE)
+//CHECK: Name: foo
+//CHECK: Section: my_text.1 (0x4)
//CHECK: }
//CHECK: Symbol {
//CHECK: Name: b
//CHECK: Section: my_data.1 (0xF)
//CHECK: }
//CHECK: Symbol {
+//CHECK: Name: goo
+//CHECK: Section: my_text.2 (0x8)
+//CHECK: }
+//CHECK: Symbol {
+//CHECK: Name: hoo
+//CHECK: Section: .text (0x2)
+//CHECK: }
+//CHECK: Symbol {
+//CHECK: Name: a
+//CHECK: Section: my_bss.1 (0xE)
+//CHECK: }
+//CHECK: Symbol {
//CHECK: Name: c
//CHECK: Section: my_bss.1 (0xE)
//CHECK: }
//CHECK: Section: my_rodata.1 (0x10)
//CHECK: }
//CHECK: Symbol {
-//CHECK: Name: foo
-//CHECK: Section: my_text.1 (0x4)
-//CHECK: }
-//CHECK: Symbol {
-//CHECK: Name: goo
-//CHECK: Section: my_text.2 (0x8)
-//CHECK: }
-//CHECK: Symbol {
//CHECK: Name: h
//CHECK: Section: .bss (0x11)
//CHECK: }
//CHECK: Symbol {
-//CHECK: Name: hoo
-//CHECK: Section: .text (0x2)
-//CHECK: }
-//CHECK: Symbol {
//CHECK: Name: i
//CHECK: Section: my_bss.2 (0x12)
//CHECK: }
# CHECK-NEXT: EntrySize: 16
# CHECK-NEXT: SectionData (
# CHECK-NEXT: 0000: 02000000 05000000 20000000 00000000
-# CHECK-NEXT: 0010: 06000000 02000000 0B000000 00000000
-# CHECK-NEXT: 0020: 07000000 03000000 14000000 00000000
+# CHECK-NEXT: 0010: 07000000 02000000 0B000000 00000000
+# CHECK-NEXT: 0020: 06000000 03000000 14000000 00000000
# CHECK-NEXT: 0030: 01000000 05000000 2A000000 00000000
# CHECK-NEXT: )
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
# CHECK-NEXT: Section: Undefined
-# CHECK: Name: freq
+# CHECK: Name: late
# CHECK-NEXT: Value:
# CHECK-NEXT: Size:
-# CHECK-NEXT: Binding: Weak
+# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
-# CHECK-NEXT: Section: Undefined
-# CHECK: Name: late
+# CHECK-NEXT: Section: .test
+# CHECK: Name: freq
# CHECK-NEXT: Value:
# CHECK-NEXT: Size:
-# CHECK-NEXT: Binding: Global
+# CHECK-NEXT: Binding: Weak
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
-# CHECK-NEXT: Section: .test
+# CHECK-NEXT: Section: Undefined
# CHECK: CGProfile [
# CHECK-NEXT: CGProfileEntry {
# CHECK-NEXT: From: a
# CHECK-NEXT: 8: 0000000000000000 0 SECTION LOCAL DEFAULT 8 bar1
# CHECK-NEXT: 9: 0000000000000000 0 NOTYPE LOCAL DEFAULT 8 local2
# CHECK-NEXT: 10: 0000000000000000 0 FILE LOCAL DEFAULT ABS bar.c
-# CHECK-NEXT: 11: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 6 bar.c
-# CHECK-NEXT: 12: 0000000000000008 0 NOTYPE GLOBAL DEFAULT 2 foo.c
+# CHECK-NEXT: 11: 0000000000000008 0 NOTYPE GLOBAL DEFAULT 2 foo.c
+# CHECK-NEXT: 12: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 6 bar.c
.quad .text
// CHECK: Symbol {
-// CHECK: Name: bar
+// CHECK: Name: foo
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Section: Undefined (0x0)
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
-// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Name: bar
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
# SYM-NEXT: NOTYPE LOCAL DEFAULT 4 data_alias_l
# SYM-NEXT: SECTION LOCAL DEFAULT 4 .data
# SYM-NEXT: NOTYPE GLOBAL DEFAULT UND __GI_memcpy
-# SYM-NEXT: NOTYPE GLOBAL DEFAULT 4 data
# SYM-NEXT: NOTYPE GLOBAL DEFAULT 4 data_alias
+# SYM-NEXT: NOTYPE GLOBAL DEFAULT 4 data
# SYM-NOT: {{.}}
.Ltmp3:
.size foobar, .Ltmp3-foobar
-// CHECK: Name: bar (14)
-// CHECK: Name: foo (18)
// CHECK: Name: foobar (11)
+// CHECK: Name: foo (18)
+// CHECK: Name: bar (14)
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t
# RUN: llvm-readelf -s %t | FileCheck %s
-# CHECK: NOTYPE GLOBAL HIDDEN {{[1-9]}} def@@v1
-# CHECK-NEXT: NOTYPE GLOBAL PROTECTED UND undef@v1
+# CHECK: NOTYPE GLOBAL PROTECTED UND undef@v1
+# CHECK-NEXT: NOTYPE GLOBAL HIDDEN {{[1-9]}} def@@v1
.protected undef
.symver undef, undef@@@v1
# SYM-NEXT: 4: 0000000000000000 0 NOTYPE LOCAL DEFAULT 2 bar1@zed
# SYM-NEXT: 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT 2 bar3@@zed
# SYM-NEXT: 6: 0000000000000000 0 NOTYPE LOCAL DEFAULT 2 bar5@@zed
-# SYM-NEXT: 7: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar2@zed
-# SYM-NEXT: 8: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar6@zed
-# SYM-NEXT: 9: 0000000000000014 0 NOTYPE GLOBAL DEFAULT 2 g1@@zed
-# SYM-NEXT: 10: 0000000000000014 0 NOTYPE GLOBAL DEFAULT 2 global1
+# SYM-NEXT: 7: 0000000000000014 0 NOTYPE GLOBAL DEFAULT 2 global1
+# SYM-NEXT: 8: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar2@zed
+# SYM-NEXT: 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar6@zed
+# SYM-NEXT: 10: 0000000000000014 0 NOTYPE GLOBAL DEFAULT 2 g1@@zed
# CHECK: Symbol table '.symtab' contains 34 entries:
# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
-# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
-# CHECK-NEXT: 1: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 alias1
-# CHECK-NEXT: 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias10
-# CHECK-NEXT: 3: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 alias11
-# CHECK-NEXT: 4: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 alias12
-# CHECK-NEXT: 5: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias2
-# CHECK-NEXT: 6: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias3
-# CHECK-NEXT: 7: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias4
-# CHECK-NEXT: 8: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias5
-# CHECK-NEXT: 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias6
-# CHECK-NEXT: 10: 0000000000000000 0 TLS GLOBAL DEFAULT 2 alias7
-# CHECK-NEXT: 11: 0000000000000000 0 TLS GLOBAL DEFAULT 2 alias8
-# CHECK-NEXT: 12: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias9
-# CHECK-NEXT: 13: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 bar
-# CHECK-NEXT: 14: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 foo
-# CHECK-NEXT: 15: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 func
-# CHECK-NEXT: 16: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 ifunc
-# CHECK-NEXT: 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 obj
-# CHECK-NEXT: 18: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym1
-# CHECK-NEXT: 19: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym10
-# CHECK-NEXT: 20: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym11
-# CHECK-NEXT: 21: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym12
-# CHECK-NEXT: 22: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym2
-# CHECK-NEXT: 23: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym3
-# CHECK-NEXT: 24: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym4
-# CHECK-NEXT: 25: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym5
-# CHECK-NEXT: 26: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 sym6
-# CHECK-NEXT: 27: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym7
-# CHECK-NEXT: 28: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym8
-# CHECK-NEXT: 29: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym9
-# CHECK-NEXT: 30: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls
-# CHECK-NEXT: 31: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls_quoted
-# CHECK-NEXT: 32: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls_upper_case
-# CHECK-NEXT: 33: 0000000000000000 0 OBJECT UNIQUE DEFAULT 2 zed
+# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+# CHECK-NEXT: 1: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 foo
+# CHECK-NEXT: 2: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 bar
+# CHECK-NEXT: 3: 0000000000000000 0 OBJECT UNIQUE DEFAULT 2 zed
+# CHECK-NEXT: 4: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 obj
+# CHECK-NEXT: 5: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 func
+# CHECK-NEXT: 6: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 ifunc
+# CHECK-NEXT: 7: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls
+# CHECK-NEXT: 8: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls_quoted
+# CHECK-NEXT: 9: 0000000000000000 0 TLS GLOBAL DEFAULT 2 tls_upper_case
+# CHECK-NEXT: 10: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym1
+# CHECK-NEXT: 11: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 alias1
+# CHECK-NEXT: 12: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym2
+# CHECK-NEXT: 13: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias2
+# CHECK-NEXT: 14: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym3
+# CHECK-NEXT: 15: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias3
+# CHECK-NEXT: 16: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym4
+# CHECK-NEXT: 17: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias4
+# CHECK-NEXT: 18: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym5
+# CHECK-NEXT: 19: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias5
+# CHECK-NEXT: 20: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 sym6
+# CHECK-NEXT: 21: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias6
+# CHECK-NEXT: 22: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 sym7
+# CHECK-NEXT: 23: 0000000000000000 0 TLS GLOBAL DEFAULT 2 alias7
+# CHECK-NEXT: 24: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 sym8
+# CHECK-NEXT: 25: 0000000000000000 0 TLS GLOBAL DEFAULT 2 alias8
+# CHECK-NEXT: 26: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym9
+# CHECK-NEXT: 27: 0000000000000000 0 OBJECT GLOBAL DEFAULT 2 alias9
+# CHECK-NEXT: 28: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym10
+# CHECK-NEXT: 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 alias10
+# CHECK-NEXT: 30: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym11
+# CHECK-NEXT: 31: 0000000000000000 0 IFUNC GLOBAL DEFAULT 2 alias11
+# CHECK-NEXT: 32: 0000000000000000 0 TLS GLOBAL DEFAULT 2 sym12
+# CHECK-NEXT: 33: 0000000000000000 0 FUNC GLOBAL DEFAULT 2 alias12
// Test that both % and @ are accepted.
.global foo
# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
# CHECK-NEXT: 1: 0000000000000000 0 NOTYPE LOCAL DEFAULT 4 .Lsym8
-# CHECK-NEXT: 2: 0000000000000000 0 NOTYPE GLOBAL HIDDEN UND hidden
-# CHECK-NEXT: 3: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND sym6
+# CHECK-NEXT: 2: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND sym6
+# CHECK-NEXT: 3: 0000000000000000 0 NOTYPE GLOBAL HIDDEN UND hidden
# CHECK-NEXT: 4: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND undef
.Lsym2:
bar:
// CHECK: Symbol {
-// CHECK: Name: bar
-// CHECK-NEXT: Value: 0x4
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Weak
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: .text
+// CHECK-NEXT: Section: Undefined (0x0)
// CHECK-NEXT: }
-// CHECK: Symbol {
-// CHECK: Name: foo
-// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar
+// CHECK-NEXT: Value: 0x4
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Weak
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
-// CHECK-NEXT: Section: Undefined (0x0)
+// CHECK-NEXT: Section: .text
// CHECK-NEXT: }
// CHECK-NEXT: ]
# CHECK-NEXT: 4: 000000000000001c 0 NOTYPE LOCAL DEFAULT 2 bar8
# CHECK-NEXT: 5: 0000000000000020 0 NOTYPE LOCAL DEFAULT 2 bar9
# CHECK-NEXT: 6: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar1
-# CHECK-NEXT: 7: 0000000000000028 0 NOTYPE GLOBAL DEFAULT 2 bar10
-# CHECK-NEXT: 8: 0000000000000030 0 NOTYPE GLOBAL DEFAULT 2 bar11
-# CHECK-NEXT: 9: 0000000000000030 0 NOTYPE GLOBAL DEFAULT 2 bar12
-# CHECK-NEXT: 10: 0000000000000034 0 NOTYPE GLOBAL DEFAULT 2 bar13
-# CHECK-NEXT: 11: 0000000000000038 0 NOTYPE GLOBAL DEFAULT 2 bar14
-# CHECK-NEXT: 12: 0000000000000040 0 NOTYPE GLOBAL DEFAULT 2 bar15
-# CHECK-NEXT: 13: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar2
-# CHECK-NEXT: 14: 0000000000000000 0 NOTYPE WEAK DEFAULT UND bar3
-# CHECK-NEXT: 15: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar4
-# CHECK-NEXT: 16: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar5
-
+# CHECK-NEXT: 7: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar2
+# CHECK-NEXT: 8: 0000000000000000 0 NOTYPE WEAK DEFAULT UND bar3
+# CHECK-NEXT: 9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar4
+# CHECK-NEXT: 10: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar5
+# CHECK-NEXT: 11: 0000000000000028 0 NOTYPE GLOBAL DEFAULT 2 bar10
+# CHECK-NEXT: 12: 0000000000000030 0 NOTYPE GLOBAL DEFAULT 2 bar11
+# CHECK-NEXT: 13: 0000000000000030 0 NOTYPE GLOBAL DEFAULT 2 bar12
+# CHECK-NEXT: 14: 0000000000000034 0 NOTYPE GLOBAL DEFAULT 2 bar13
+# CHECK-NEXT: 15: 0000000000000038 0 NOTYPE GLOBAL DEFAULT 2 bar14
+# CHECK-NEXT: 16: 0000000000000040 0 NOTYPE GLOBAL DEFAULT 2 bar15
.weakref foo1, bar1
f2:
nop
-// CHECK-LABEL: Name: d1
-// CHECK: Other: 0
// CHECK-LABEL: Name: f1
// CHECK: Other [ (0x80)
+// CHECK-LABEL: Name: d1
+// CHECK: Other: 0
// CHECK-LABEL: Name: f2
// CHECK: Other: 0
# OBJ: Name: f_mm_insn_instr
# OBJ: Other [ (0x80)
-# OBJ: Name: f_normal_insn_data
-# OBJ: Other: 0
-
-# OBJ: Name: f_normal_insn_instr
-# OBJ: Other: 0
-
# OBJ: Name: o_mm_insn_data
# OBJ: Other [ (0x80)
# OBJ: Name: o_mm_insn_instr
# OBJ: Other [ (0x80)
+# OBJ: Name: f_normal_insn_data
+# OBJ: Other: 0
+
+# OBJ: Name: f_normal_insn_instr
+# OBJ: Other: 0
+
# OBJ: Name: o_normal_insn_data
# OBJ: Other: 0
# CHECK: Type Bind Vis Ndx Name
# CHECK: FUNC GLOBAL DEFAULT [<other: 0x60>] 2 foo
-# CHECK-NEXT: FUNC WEAK DEFAULT [<other: 0x60>] 2 foo@FBSD_1.1
+# CHECK-NEXT: FUNC WEAK DEFAULT [<other: 0x60>] 2 __impl_foo
# CHECK-NEXT: FUNC GLOBAL DEFAULT [<other: 0x60>] 2 func
# CHECK-NEXT: FUNC WEAK DEFAULT [<other: 0x60>] 2 weak_func
+# CHECK: FUNC WEAK DEFAULT [<other: 0x60>] 2 foo@FBSD_1.1
.text
.abiversion 2