mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-27 15:29:51 +00:00
We already do this for shstrtab, so might as well do it for strtab. This extracts the string table building code into a separate class. The idea is to use it for other object formats too. I mostly wanted to do this for the general principle, but it does save a little bit on object file size. I tried this on a clang bootstrap and saved 0.54% on the sum of object file sizes (1.14 MB out of 212 MB for a release build). Differential Revision: http://reviews.llvm.org/D3533 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207670 91177308-0d34-0410-b5e6-96231b3b80d8
313 lines
8.0 KiB
ArmAsm
313 lines
8.0 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t | FileCheck %s
|
|
|
|
// Test that both % and @ are accepted.
|
|
.global foo
|
|
.type foo,%function
|
|
foo:
|
|
|
|
.global bar
|
|
.type bar,@object
|
|
bar:
|
|
|
|
// Test that gnu_unique_object is accepted.
|
|
.type zed,@gnu_unique_object
|
|
|
|
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
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: bar
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: Object
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: foo
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: Function
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: func
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: Function
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: ifunc
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: GNU_IFunc
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: obj
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: Object
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym1
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: GNU_IFunc (0xA)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym10
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: TLS (0x6)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym11
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: TLS (0x6)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym12
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: TLS (0x6)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym2
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: GNU_IFunc (0xA)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym3
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: GNU_IFunc (0xA)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym4
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: Function (0x2)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym5
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: Function (0x2)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym6
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: Object (0x1)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym7
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: GNU_IFunc (0xA)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym8
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: Function (0x2)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: sym9
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global (0x1)
|
|
// CHECK-NEXT: Type: TLS (0x6)
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: tls
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: TLS
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: tls_quoted
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: TLS
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: tls_upper_case
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: TLS
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .text (0x1)
|
|
// CHECK-NEXT: }
|