Skip to content

Commit

Permalink
Change section flag character for SHF_LINK_ORDER to "o".
Browse files Browse the repository at this point in the history
GAS uses "m" as a compatibility alias for "M" (SHF_MERGE).

"o" is free, except on ia64, where it already means SHF_LINK_ORDER.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299479 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
eugenis committed Apr 4, 2017
1 parent 862117b commit 8719ab1
Show file tree
Hide file tree
Showing 9 changed files with 23 additions and 23 deletions.
6 changes: 3 additions & 3 deletions docs/Extensions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -204,22 +204,22 @@ 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.

.. code-block:: gas
.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
Expand Down
2 changes: 1 addition & 1 deletion lib/MC/MCParser/ELFAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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':
Expand Down
2 changes: 1 addition & 1 deletion lib/MC/MCSectionELF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
16 changes: 8 additions & 8 deletions test/CodeGen/X86/elf-associated.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test/MC/ELF/section-metadata-err1.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion test/MC/ELF/section-metadata-err2.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion test/MC/ELF/section-metadata-err3.s
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 1 addition & 1 deletion test/MC/ELF/section-metadata-err4.s
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

// CHECK: error: expected metadata symbol

.section .shf_metadata,"am",@progbits
.section .shf_metadata,"ao",@progbits
12 changes: 6 additions & 6 deletions test/MC/ELF/section.s
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 8719ab1

Please sign in to comment.