| // RUN: llvm-mc -filetype=obj -triple arm-eabi %s -o - | llvm-readobj -s -t | 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 (http://llvm.org/git/clang.git 254242a3ad440307fb451093a429c71ea9a8c888) (http://llvm.org/git/llvm.git 3c8daefbe3d1672ac1dae775b211f881f0063038)" | |
| .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: } |