mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-01 01:31:26 +00:00
Change section flag character for SHF_LINK_ORDER to "o".
GAS uses "m" as a compatibility alias for "M" (SHF_MERGE). "o" is free, except on ia64, where it already means SHF_LINK_ORDER. llvm-svn: 299479
This commit is contained in:
parent
69a9e931ce
commit
12de7b2446
@ -204,7 +204,7 @@ For example, the following code creates two sections named ``.text``.
|
||||
The unique number is not present in the resulting object at all. It is just used
|
||||
in the assembler to differentiate the sections.
|
||||
|
||||
The 'm' flag is mapped to SHF_LINK_ORDER. If it is present, a symbol
|
||||
The 'o' flag is mapped to SHF_LINK_ORDER. If it is present, a symbol
|
||||
must be given that identifies the section to be placed is the
|
||||
.sh_link.
|
||||
|
||||
@ -212,14 +212,14 @@ must be given that identifies the section to be placed is the
|
||||
|
||||
.section .foo,"a",@progbits
|
||||
.Ltmp:
|
||||
.section .bar,"am",@progbits,.Ltmp
|
||||
.section .bar,"ao",@progbits,.Ltmp
|
||||
|
||||
which is equivalent to just
|
||||
|
||||
.. code-block:: gas
|
||||
|
||||
.section .foo,"a",@progbits
|
||||
.section .bar,"am",@progbits,.foo
|
||||
.section .bar,"ao",@progbits,.foo
|
||||
|
||||
|
||||
Target Specific Behaviour
|
||||
|
@ -298,7 +298,7 @@ static unsigned parseSectionFlags(StringRef flagsStr, bool *UseLastGroup) {
|
||||
case 'w':
|
||||
flags |= ELF::SHF_WRITE;
|
||||
break;
|
||||
case 'm':
|
||||
case 'o':
|
||||
flags |= ELF::SHF_LINK_ORDER;
|
||||
break;
|
||||
case 'M':
|
||||
|
@ -104,7 +104,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
if (Flags & ELF::SHF_TLS)
|
||||
OS << 'T';
|
||||
if (Flags & ELF::SHF_LINK_ORDER)
|
||||
OS << 'm';
|
||||
OS << 'o';
|
||||
|
||||
// If there are target-specific flags, print them.
|
||||
Triple::ArchType Arch = T.getArch();
|
||||
|
@ -4,23 +4,23 @@
|
||||
@a = global i32 1
|
||||
@b = global i32 2, !associated !0
|
||||
!0 = !{i32* @a}
|
||||
; CHECK-DAG: .section .data.b,"awm",@progbits,a
|
||||
; CHECK-DAG: .section .data.b,"awo",@progbits,a
|
||||
|
||||
; Loop is OK. Also, normally -data-sections=0 would place @c and @d in the same section. !associated prevents that.
|
||||
@c = global i32 2, !associated !2
|
||||
@d = global i32 2, !associated !1
|
||||
!1 = !{i32* @c}
|
||||
!2 = !{i32* @d}
|
||||
; CHECK-DAG: .section .data.c,"awm",@progbits,d
|
||||
; CHECK-DAG: .section .data.d,"awm",@progbits,c
|
||||
; CHECK-DAG: .section .data.c,"awo",@progbits,d
|
||||
; CHECK-DAG: .section .data.d,"awo",@progbits,c
|
||||
|
||||
; BSS is OK.
|
||||
@e = global i32 0
|
||||
@f = global i32 0, !associated !3
|
||||
@g = global i32 1, !associated !3
|
||||
!3 = !{i32* @e}
|
||||
; CHECK-DAG: .section .bss.f,"awm",@nobits,e
|
||||
; CHECK-DAG: .section .data.g,"awm",@progbits,e
|
||||
; CHECK-DAG: .section .bss.f,"awo",@nobits,e
|
||||
; CHECK-DAG: .section .data.g,"awo",@progbits,e
|
||||
|
||||
; Explicit sections.
|
||||
@h = global i32 1, section "aaa"
|
||||
@ -29,9 +29,9 @@
|
||||
@k = global i32 1, !associated !4
|
||||
!4 = !{i32* @h}
|
||||
; CHECK-DAG: .section aaa,"aw",@progbits
|
||||
; CHECK-DAG: .section bbb,"awm",@progbits,h,unique,1
|
||||
; CHECK-DAG: .section bbb,"awm",@progbits,h,unique,2
|
||||
; CHECK-DAG: .section .data.k,"awm",@progbits,h
|
||||
; CHECK-DAG: .section bbb,"awo",@progbits,h,unique,1
|
||||
; CHECK-DAG: .section bbb,"awo",@progbits,h,unique,2
|
||||
; CHECK-DAG: .section .data.k,"awo",@progbits,h
|
||||
|
||||
; Non-GlobalObject metadata.
|
||||
@l = global i32 1, section "ccc", !associated !5
|
||||
|
@ -2,4 +2,4 @@
|
||||
|
||||
// CHECK: error: symbol is not in a section: foo
|
||||
|
||||
.section .shf_metadata,"am",@progbits,foo
|
||||
.section .shf_metadata,"ao",@progbits,foo
|
||||
|
@ -3,4 +3,4 @@
|
||||
// CHECK: error: symbol is not in a section: foo
|
||||
|
||||
.quad foo
|
||||
.section .shf_metadata,"am",@progbits,foo
|
||||
.section .shf_metadata,"ao",@progbits,foo
|
||||
|
@ -3,4 +3,4 @@
|
||||
// CHECK: error: symbol is not in a section: foo
|
||||
|
||||
foo = 42
|
||||
.section .shf_metadata,"am",@progbits,foo
|
||||
.section .shf_metadata,"ao",@progbits,foo
|
||||
|
@ -2,4 +2,4 @@
|
||||
|
||||
// CHECK: error: expected metadata symbol
|
||||
|
||||
.section .shf_metadata,"am",@progbits
|
||||
.section .shf_metadata,"ao",@progbits
|
||||
|
@ -163,12 +163,12 @@ bar:
|
||||
.Lshf_metadata_target2_2:
|
||||
.quad 0
|
||||
|
||||
.section .shf_metadata1,"am",@progbits,.Lshf_metadata_target2_1
|
||||
.section .shf_metadata2,"am",@progbits,.Lshf_metadata_target2_2
|
||||
.section .shf_metadata3,"am",@progbits,.shf_metadata_target1
|
||||
// ASM: .section .shf_metadata1,"am",@progbits,.Lshf_metadata_target2_1
|
||||
// ASM: .section .shf_metadata2,"am",@progbits,.Lshf_metadata_target2_2
|
||||
// ASM: .section .shf_metadata3,"am",@progbits,.shf_metadata_target1
|
||||
.section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1
|
||||
.section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2
|
||||
.section .shf_metadata3,"ao",@progbits,.shf_metadata_target1
|
||||
// ASM: .section .shf_metadata1,"ao",@progbits,.Lshf_metadata_target2_1
|
||||
// ASM: .section .shf_metadata2,"ao",@progbits,.Lshf_metadata_target2_2
|
||||
// ASM: .section .shf_metadata3,"ao",@progbits,.shf_metadata_target1
|
||||
|
||||
// CHECK: Section {
|
||||
// CHECK: Index: 22
|
||||
|
Loading…
Reference in New Issue
Block a user