mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
During ELF writing, there is no need to further relax the sections, so we should not be creating fragments. This patch avoids doing so in all cases but debug section compression (that is next). Also, the ELF format is fairly simple to write. We can do a single pass over the sections to write them out and compute the section header table. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236235 91177308-0d34-0410-b5e6-96231b3b80d8
138 lines
4.4 KiB
ArmAsm
138 lines
4.4 KiB
ArmAsm
@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
|
|
@ RUN: | llvm-readobj -s -sd -sr -t | FileCheck %s
|
|
|
|
@ Check the .group section for the function in comdat section.
|
|
|
|
@ In C++, the instantiation of the template will come with linkonce (or
|
|
@ linkonce_odr) linkage, so that the linker can remove the duplicated
|
|
@ instantiation. When the exception handling is enabled on those function,
|
|
@ we have to group the corresponding .ARM.extab and .ARM.exidx with the
|
|
@ text section together.
|
|
@
|
|
@ This test case will check the content of .group section. The section index
|
|
@ of the grouped sections should be recorded in .group section.
|
|
|
|
.syntax unified
|
|
.section .TEST1,"axG",%progbits,func1,comdat
|
|
.weak func1
|
|
.align 2
|
|
.type func1,%function
|
|
func1:
|
|
.fnstart
|
|
.save {r4, lr}
|
|
push {r4, lr}
|
|
.vsave {d8, d9, d10, d11, d12}
|
|
vpush {d8, d9, d10, d11, d12}
|
|
.pad #24
|
|
sub sp, sp, #24
|
|
|
|
add sp, sp, #24
|
|
vpop {d8, d9, d10, d11, d12}
|
|
pop {r4, pc}
|
|
|
|
.globl __gxx_personality_v0
|
|
.personality __gxx_personality_v0
|
|
.handlerdata
|
|
.fnend
|
|
|
|
|
|
|
|
@-------------------------------------------------------------------------------
|
|
@ Check the .group section
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Sections [
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 1
|
|
@ CHECK: Name: .group
|
|
@ CHECK: Type: SHT_GROUP (0x11)
|
|
@ CHECK: Flags [ (0x0)
|
|
@ CHECK: ]
|
|
@ CHECK: Size: 24
|
|
@ CHECK: SectionData (
|
|
@-------------------------------------------------------------------------------
|
|
@ These are the section indexes of .TEST1, .ARM.extab.TEST1, .ARM.exidx.TEST1,
|
|
@ .rel.ARM.extab.TEST1, and .rel.ARM.exidx.TEST1.
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK-NEXT: 0000: 01000000 06000000 07000000 08000000
|
|
@ CHECK-NEXT: 0010: 09000000 0A000000
|
|
@ CHECK-NEXT: )
|
|
@ CHECK: }
|
|
|
|
|
|
@-------------------------------------------------------------------------------
|
|
@ Check the .TEST1 section
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 6
|
|
@ CHECK-NEXT: Name: .TEST1
|
|
@ CHECK: Type: SHT_PROGBITS (0x1)
|
|
@-------------------------------------------------------------------------------
|
|
@ The flags should contain SHF_GROUP.
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Flags [ (0x206)
|
|
@ CHECK: SHF_ALLOC (0x2)
|
|
@ CHECK: SHF_EXECINSTR (0x4)
|
|
@ CHECK: SHF_GROUP (0x200)
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
|
|
@-------------------------------------------------------------------------------
|
|
@ Check the .ARM.extab.TEST1 section
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 7
|
|
@ CHECK-NEXT: Name: .ARM.extab.TEST1
|
|
@ CHECK: Type: SHT_PROGBITS (0x1)
|
|
@-------------------------------------------------------------------------------
|
|
@ The flags should contain SHF_GROUP.
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Flags [ (0x202)
|
|
@ CHECK: SHF_ALLOC (0x2)
|
|
@ CHECK: SHF_GROUP (0x200)
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 8
|
|
@ CHECK-NEXT: Name: .rel.ARM.extab.TEST1
|
|
@ CHECK: }
|
|
|
|
@-------------------------------------------------------------------------------
|
|
@ Check the .ARM.exidx.TEST1 section
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 9
|
|
@ CHECK-NEXT: Name: .ARM.exidx.TEST1
|
|
@ CHECK: Type: SHT_ARM_EXIDX (0x70000001)
|
|
@-------------------------------------------------------------------------------
|
|
@ The flags should contain SHF_GROUP.
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Flags [ (0x282)
|
|
@ CHECK: SHF_ALLOC (0x2)
|
|
@ CHECK: SHF_GROUP (0x200)
|
|
@ CHECK: SHF_LINK_ORDER (0x80)
|
|
@ CHECK: ]
|
|
@ CHECK: Link: 6
|
|
@ CHECK: }
|
|
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Index: 10
|
|
@ CHECK-NEXT: Name: .rel.ARM.exidx.TEST1
|
|
@ CHECK: }
|
|
|
|
@ CHECK: ]
|
|
|
|
@-------------------------------------------------------------------------------
|
|
@ Check symbol func1. It should be weak binding, and belong to .TEST1 section.
|
|
@-------------------------------------------------------------------------------
|
|
@ CHECK: Symbols [
|
|
@ CHECK: Symbol {
|
|
@ CHECK: Name: func1
|
|
@ CHECK: Binding: Weak (0x2)
|
|
@ CHECK: Type: Function (0x2)
|
|
@ CHECK: Section: .TEST1
|
|
@ CHECK: }
|
|
@ CHECK: ]
|