400 lines
8.5 KiB
ArmAsm
400 lines
8.5 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple arm-eabi %s -o - | llvm-readobj -S --symbols - | FileCheck %s
|
|
// Test that global variables and functions are assigned correct section.
|
|
.text
|
|
.syntax unified
|
|
.eabi_attribute 67, "2.09" @ Tag_conformance
|
|
.eabi_attribute 6, 1 @ Tag_CPU_arch
|
|
.eabi_attribute 8, 1 @ Tag_ARM_ISA_use
|
|
.eabi_attribute 17, 1 @ Tag_ABI_PCS_GOT_use
|
|
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
|
|
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
|
|
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
|
|
.eabi_attribute 34, 1 @ Tag_CPU_unaligned_access
|
|
.eabi_attribute 24, 1 @ Tag_ABI_align_needed
|
|
.eabi_attribute 25, 1 @ Tag_ABI_align_preserved
|
|
.eabi_attribute 38, 1 @ Tag_ABI_FP_16bit_format
|
|
.eabi_attribute 18, 4 @ Tag_ABI_PCS_wchar_t
|
|
.eabi_attribute 26, 2 @ Tag_ABI_enum_size
|
|
.eabi_attribute 14, 0 @ Tag_ABI_PCS_R9_use
|
|
.section my_text.1,"ax",%progbits
|
|
.globl foo
|
|
.p2align 2
|
|
.type foo,%function
|
|
.code 32 @ @foo
|
|
foo:
|
|
.fnstart
|
|
@ %bb.0: @ %entry
|
|
ldr r0, .LCPI0_0
|
|
ldr r0, [r0]
|
|
mov pc, lr
|
|
.p2align 2
|
|
@ %bb.1:
|
|
.LCPI0_0:
|
|
.long b
|
|
.Lfunc_end0:
|
|
.size foo, .Lfunc_end0-foo
|
|
.cantunwind
|
|
.fnend
|
|
|
|
.section my_text.2,"ax",%progbits
|
|
.globl goo
|
|
.p2align 2
|
|
.type goo,%function
|
|
.code 32 @ @goo
|
|
goo:
|
|
.fnstart
|
|
@ %bb.0: @ %entry
|
|
.save {r11, lr}
|
|
push {r11, lr}
|
|
ldr r0, .LCPI1_0
|
|
ldr r1, .LCPI1_1
|
|
bl zoo
|
|
pop {r11, lr}
|
|
mov pc, lr
|
|
.p2align 2
|
|
@ %bb.1:
|
|
.LCPI1_0:
|
|
.long _ZL1g
|
|
.LCPI1_1:
|
|
.long _ZZ3gooE7lstat_h
|
|
.Lfunc_end1:
|
|
.size goo, .Lfunc_end1-goo
|
|
.cantunwind
|
|
.fnend
|
|
|
|
.text
|
|
.globl hoo
|
|
.p2align 2
|
|
.type hoo,%function
|
|
.code 32 @ @hoo
|
|
hoo:
|
|
.fnstart
|
|
@ %bb.0: @ %entry
|
|
ldr r0, .LCPI2_0
|
|
ldr r0, [r0]
|
|
mov pc, lr
|
|
.p2align 2
|
|
@ %bb.1:
|
|
.LCPI2_0:
|
|
.long b
|
|
.Lfunc_end2:
|
|
.size hoo, .Lfunc_end2-hoo
|
|
.cantunwind
|
|
.fnend
|
|
|
|
.type a,%object @ @a
|
|
.section my_bss.1,"aw",%nobits
|
|
.globl a
|
|
.p2align 2
|
|
a:
|
|
.long 0 @ 0x0
|
|
.size a, 4
|
|
|
|
.type b,%object @ @b
|
|
.section my_data.1,"aw",%progbits
|
|
.globl b
|
|
.p2align 2
|
|
b:
|
|
.long 1 @ 0x1
|
|
.size b, 4
|
|
|
|
.type c,%object @ @c
|
|
.section my_bss.1,"aw",%nobits
|
|
.globl c
|
|
.p2align 2
|
|
c:
|
|
.zero 16
|
|
.size c, 16
|
|
|
|
.type d,%object @ @d
|
|
.globl d
|
|
.p2align 1
|
|
d:
|
|
.zero 10
|
|
.size d, 10
|
|
|
|
.type e,%object @ @e
|
|
.section my_data.1,"aw",%progbits
|
|
.globl e
|
|
.p2align 1
|
|
e:
|
|
.short 0 @ 0x0
|
|
.short 0 @ 0x0
|
|
.short 1 @ 0x1
|
|
.short 0 @ 0x0
|
|
.short 0 @ 0x0
|
|
.short 0 @ 0x0
|
|
.size e, 12
|
|
|
|
.type f,%object @ @f
|
|
.section my_rodata.1,"a",%progbits
|
|
.globl f
|
|
.p2align 2
|
|
f:
|
|
.long 2 @ 0x2
|
|
.size f, 4
|
|
|
|
.type h,%object @ @h
|
|
.bss
|
|
.globl h
|
|
.p2align 2
|
|
h:
|
|
.long 0 @ 0x0
|
|
.size h, 4
|
|
|
|
.type i,%object @ @i
|
|
.section my_bss.2,"aw",%nobits
|
|
.globl i
|
|
.p2align 2
|
|
i:
|
|
.long 0 @ 0x0
|
|
.size i, 4
|
|
|
|
.type j,%object @ @j
|
|
.section my_rodata.1,"a",%progbits
|
|
.globl j
|
|
.p2align 2
|
|
j:
|
|
.long 4 @ 0x4
|
|
.size j, 4
|
|
|
|
.type k,%object @ @k
|
|
.section my_bss.2,"aw",%nobits
|
|
.globl k
|
|
.p2align 2
|
|
k:
|
|
.long 0 @ 0x0
|
|
.size k, 4
|
|
|
|
.type _ZZ3gooE7lstat_h,%object @ @_ZZ3gooE7lstat_h
|
|
.p2align 2
|
|
_ZZ3gooE7lstat_h:
|
|
.long 0 @ 0x0
|
|
.size _ZZ3gooE7lstat_h, 4
|
|
|
|
.type _ZL1g,%object @ @_ZL1g
|
|
.section my_bss.1,"aw",%nobits
|
|
.p2align 2
|
|
_ZL1g:
|
|
.zero 8
|
|
.size _ZL1g, 8
|
|
|
|
.type l,%object @ @l
|
|
.section my_data.2,"aw",%progbits
|
|
.globl l
|
|
.p2align 2
|
|
l:
|
|
.long 5 @ 0x5
|
|
.size l, 4
|
|
|
|
.type m,%object @ @m
|
|
.section my_rodata.2,"a",%progbits
|
|
.globl m
|
|
.p2align 2
|
|
m:
|
|
.long 6 @ 0x6
|
|
.size m, 4
|
|
|
|
.type n,%object @ @n
|
|
.bss
|
|
.globl n
|
|
.p2align 2
|
|
n:
|
|
.long 0 @ 0x0
|
|
.size n, 4
|
|
|
|
.type o,%object @ @o
|
|
.data
|
|
.globl o
|
|
.p2align 2
|
|
o:
|
|
.long 6 @ 0x6
|
|
.size o, 4
|
|
|
|
.type p,%object @ @p
|
|
.section .rodata,"a",%progbits
|
|
.globl p
|
|
.p2align 2
|
|
p:
|
|
.long 7 @ 0x7
|
|
.size p, 4
|
|
|
|
|
|
.ident "clang version 5.0.0"
|
|
.section ".note.GNU-stack","",%progbits
|
|
.eabi_attribute 30, 1 @ Tag_ABI_optimization_goals
|
|
|
|
//CHECK: Section {
|
|
//CHECK: Name: .text
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x6)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_EXECINSTR (0x4)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_text.1
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x6)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_EXECINSTR (0x4)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_text.2
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x6)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_EXECINSTR (0x4)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_bss.1
|
|
//CHECK: Type: SHT_NOBITS (0x8)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_data.1
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_rodata.1
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x2)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: .bss
|
|
//CHECK: Type: SHT_NOBITS (0x8)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_bss.2
|
|
//CHECK: Type: SHT_NOBITS (0x8)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_data.2
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: my_rodata.2
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x2)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: .data
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x3)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: SHF_WRITE (0x1)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Section {
|
|
//CHECK: Name: .rodata
|
|
//CHECK: Type: SHT_PROGBITS (0x1)
|
|
//CHECK: Flags [ (0x2)
|
|
//CHECK: SHF_ALLOC (0x2)
|
|
//CHECK: ]
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: _ZL1g
|
|
//CHECK: Section: my_bss.1 (0xE)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: _ZZ3gooE7lstat_h
|
|
//CHECK: Section: my_bss.2 (0x12)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: a
|
|
//CHECK: Section: my_bss.1 (0xE)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: b
|
|
//CHECK: Section: my_data.1 (0xF)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: c
|
|
//CHECK: Section: my_bss.1 (0xE)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: d
|
|
//CHECK: Section: my_bss.1 (0xE)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: e
|
|
//CHECK: Section: my_data.1 (0xF)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: f
|
|
//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: Symbol {
|
|
//CHECK: Name: j
|
|
//CHECK: Section: my_rodata.1 (0x10)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: k
|
|
//CHECK: Section: my_bss.2 (0x12)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: l
|
|
//CHECK: Section: my_data.2 (0x13)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: m
|
|
//CHECK: Section: my_rodata.2 (0x14)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: n
|
|
//CHECK: Section: .bss (0x11)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: o
|
|
//CHECK: Section: .data (0x15)
|
|
//CHECK: }
|
|
//CHECK: Symbol {
|
|
//CHECK: Name: p
|
|
//CHECK: Section: .rodata (0x16)
|
|
//CHECK: }
|