mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 02:29:18 +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
101 lines
2.7 KiB
ArmAsm
101 lines
2.7 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -t -sd | FileCheck %s
|
|
|
|
// Test that we produce the group sections and that they are before the members
|
|
|
|
// CHECK: Section {
|
|
// CHECK: Index: 5
|
|
// CHECK-NEXT: Name: .group
|
|
// CHECK-NEXT: Type: SHT_GROUP
|
|
// CHECK-NEXT: Flags [
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: Address: 0x0
|
|
// CHECK-NEXT: Offset:
|
|
// CHECK-NEXT: Size: 12
|
|
// CHECK-NEXT: Link:
|
|
// CHECK-NEXT: Info: 1
|
|
// CHECK-NEXT: AddressAlignment: 4
|
|
// CHECK-NEXT: EntrySize: 4
|
|
// CHECK-NEXT: SectionData (
|
|
// CHECK-NEXT: 0000: 01000000 06000000 07000000
|
|
// CHECK-NEXT: )
|
|
// CHECK-NEXT: }
|
|
// CHECK: Section {
|
|
// CHECK: Index: 8
|
|
// CHECK-NEXT: Name: .group
|
|
// CHECK-NEXT: Type: SHT_GROUP
|
|
// CHECK-NEXT: Flags [
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: Address: 0x0
|
|
// CHECK-NEXT: Offset:
|
|
// CHECK-NEXT: Size: 8
|
|
// CHECK-NEXT: Link:
|
|
// CHECK-NEXT: Info: 2
|
|
// CHECK-NEXT: AddressAlignment: 4
|
|
// CHECK-NEXT: EntrySize: 4
|
|
// CHECK-NEXT: SectionData (
|
|
// CHECK-NEXT: 0000: 01000000 09000000
|
|
// CHECK-NEXT: )
|
|
// CHECK-NEXT: }
|
|
// CHECK: Section {
|
|
// CHECK: Index: 10
|
|
// CHECK-NEXT: Name: .group
|
|
// CHECK-NEXT: Type: SHT_GROUP
|
|
// CHECK-NEXT: Flags [
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: Address: 0x0
|
|
// CHECK-NEXT: Offset:
|
|
// CHECK-NEXT: Size: 12
|
|
// CHECK-NEXT: Link:
|
|
// CHECK-NEXT: Info: 10
|
|
// CHECK-NEXT: AddressAlignment: 4
|
|
// CHECK-NEXT: EntrySize: 4
|
|
// CHECK-NEXT: SectionData (
|
|
// CHECK-NEXT: 0000: 01000000 0B000000 0C000000
|
|
// CHECK-NEXT: )
|
|
// CHECK-NEXT: }
|
|
|
|
// Test that g1 and g2 are local, but g3 is an undefined global.
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: g1
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Local
|
|
// CHECK-NEXT: Type: None
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .foo
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: g2
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Local
|
|
// CHECK-NEXT: Type: None
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: .group (0x8)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: g3
|
|
// CHECK-NEXT: Value: 0x0
|
|
// CHECK-NEXT: Size: 0
|
|
// CHECK-NEXT: Binding: Global
|
|
// CHECK-NEXT: Type: None
|
|
// CHECK-NEXT: Other: 0
|
|
// CHECK-NEXT: Section: Undefined (0x0)
|
|
// CHECK-NEXT: }
|
|
|
|
|
|
.section .foo,"axG",@progbits,g1,comdat
|
|
g1:
|
|
nop
|
|
|
|
.section .bar,"ax?",@progbits
|
|
nop
|
|
|
|
.section .zed,"axG",@progbits,g2,comdat
|
|
nop
|
|
|
|
.section .baz,"axG",@progbits,g3,comdat
|
|
.long g3
|