# RUN: llvm-mc -filetype=obj -triple=x86_64 %s | llvm-readelf -s - | FileCheck %s
# 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 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
.type foo,%function
foo:
.global bar
.type bar,@object
bar:
.type zed,@gnu_unique_object
zed:
obj:
.global obj
.type obj,@object
.type obj,@notype
func:
.global func
.type func,@function
.type func,@object
ifunc:
.global ifunc
.type ifunc,@gnu_indirect_function
tls:
.global tls
.type tls,@tls_object
.type tls,@gnu_indirect_function
// Test that "<type>" is accepted.
tls_quoted:
.global tls_quoted
.type tls_quoted,"tls_object"
// Test that "<type>" is accepted.
tls_upper_case:
.global tls_upper_case
.type tls_upper_case,STT_TLS
// Test that .set doesnt downgrade the type:
// IFUNC > FUNC > OBJECT > NOTYPE
// TLS_OBJECT > OBJECT > NOTYPE
// also TLS_OBJECT is incompatible with IFUNC and FUNC
.global sym1
.type sym1, @gnu_indirect_function
alias1:
.global alias1
.type alias1, @function
.set sym1, alias1
.global sym2
.type sym2, @gnu_indirect_function
alias2:
.global alias2
.type alias2, @object
.set sym2, alias2
.global sym3
.type sym3, @gnu_indirect_function
alias3:
.global alias3
.type alias3, @notype
.set sym3, alias3
.global sym4
.type sym4, @function
alias4:
.global alias4
.type alias4, @object
.set sym4, alias4
.global sym5
.type sym5, @function
alias5:
.global alias5
.type alias5, @notype
.set sym5, alias5
.global sym6
.type sym6, @object
alias6:
.global alias6
.type alias6, @notype
.set sym6, alias6
.global sym7
.type sym7, @gnu_indirect_function
alias7:
.global alias7
.type alias7, @tls_object
.set sym7, alias7
.global sym8
.type sym8, @function
.global alias8
alias8:
.type alias8, @tls_object
.set sym8, alias8
.global sym9
.type sym9, @tls_object
alias9:
.global alias9
.type alias9, @object
.set sym9, alias9
.global sym10
.type sym10, @tls_object
alias10:
.global alias10
.type alias10, @notype
.set sym10, alias10
.global sym11
.type sym11, @tls_object
alias11:
.global alias11
.type alias11, @gnu_indirect_function
.set sym11, alias11
.global sym12
.type sym12, @tls_object
alias12:
.global alias12
.type alias12, @function
.set sym12, alias12