Commit f6f57fd8 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r228490:

------------------------------------------------------------------------
r228490 | majnemer | 2015-02-07 00:26:40 -0800 (Sat, 07 Feb 2015) | 5 lines

MC: Emit COFF section flags in the "proper" order

COFF section flags are not idempotent:
  'rd' will make a read-write section because 'd' implies write
  'dr' will make a read-only section because 'r' disables write
------------------------------------------------------------------------

llvm-svn: 228502
parent ad7d8347
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -47,6 +47,10 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
  }

  OS << "\t.section\t" << getSectionName() << ",\"";
  if (getCharacteristics() & COFF::IMAGE_SCN_CNT_INITIALIZED_DATA)
    OS << 'd';
  if (getCharacteristics() & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
    OS << 'b';
  if (getCharacteristics() & COFF::IMAGE_SCN_MEM_EXECUTE)
    OS << 'x';
  if (getCharacteristics() & COFF::IMAGE_SCN_MEM_WRITE)
@@ -55,10 +59,6 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
    OS << 'r';
  else
    OS << 'y';
  if (getCharacteristics() & COFF::IMAGE_SCN_CNT_INITIALIZED_DATA)
    OS << 'd';
  if (getCharacteristics() & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
    OS << 'b';
  if (getCharacteristics() & COFF::IMAGE_SCN_LNK_REMOVE)
    OS << 'n';
  if (getCharacteristics() & COFF::IMAGE_SCN_MEM_SHARED)
+1 −1
Original line number Diff line number Diff line
@@ -10,6 +10,6 @@ entry:
  ret void
}

; CHECK: .section .rdata,"rd"
; CHECK: .section .rdata,"dr"
; CHECK-NOT: .section ".rodata.str1.1"
+1 −1
Original line number Diff line number Diff line
@@ -7,6 +7,6 @@ entry:
  ret void
}

; CHECK: .section .CRT$XCU,"rd"
; CHECK: .section .CRT$XCU,"dr"
; CHECK: .long function
+8 −8
Original line number Diff line number Diff line
@@ -73,20 +73,20 @@ $vftable = comdat largest
; CHECK: .globl  @v8@0
; CHECK: .section        .text,"xr",discard,@f8@0
; CHECK: .globl  @f8@0
; CHECK: .section        .bss,"wb",associative,_f1
; CHECK: .section        .bss,"bw",associative,_f1
; CHECK: .globl  _v1
; CHECK: .section        .bss,"wb",associative,_f2
; CHECK: .section        .bss,"bw",associative,_f2
; CHECK: .globl  _v2
; CHECK: .section        .bss,"wb",associative,_f3
; CHECK: .section        .bss,"bw",associative,_f3
; CHECK: .globl  _v3
; CHECK: .section        .bss,"wb",associative,_f4
; CHECK: .section        .bss,"bw",associative,_f4
; CHECK: .globl  _v4
; CHECK: .section        .bss,"wb",associative,_f5
; CHECK: .section        .bss,"bw",associative,_f5
; CHECK: .globl  _v5
; CHECK: .section        .bss,"wb",associative,_f6
; CHECK: .section        .bss,"bw",associative,_f6
; CHECK: .globl  _v6
; CHECK: .section        .bss,"wb",same_size,_f6
; CHECK: .section        .bss,"bw",same_size,_f6
; CHECK: .globl  _f6
; CHECK: .section        .rdata,"rd",largest,_vftable
; CHECK: .section        .rdata,"dr",largest,_vftable
; CHECK: .globl  _vftable
; CHECK: _vftable = L_some_name+4
+3 −3
Original line number Diff line number Diff line
@@ -40,18 +40,18 @@ define weak_odr dllexport void @weak1() {
; CHECK: .globl Var1
@Var1 = dllexport global i32 1, align 4

; CHECK: .rdata,"rd"
; CHECK: .rdata,"dr"
; CHECK: .globl Var2
@Var2 = dllexport unnamed_addr constant i32 1

; CHECK: .comm Var3
@Var3 = common dllexport global i32 0, align 4

; CHECK: .section .data,"wd",discard,WeakVar1
; CHECK: .section .data,"dw",discard,WeakVar1
; CHECK: .globl WeakVar1
@WeakVar1 = weak_odr dllexport global i32 1, align 4

; CHECK: .section .rdata,"rd",discard,WeakVar2
; CHECK: .section .rdata,"dr",discard,WeakVar2
; CHECK: .globl WeakVar2
@WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1

Loading