mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-13 15:37:24 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228490 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7e940c4725
commit
fdac306a12
@ -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)
|
||||
|
@ -10,6 +10,6 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: .section .rdata,"rd"
|
||||
; CHECK: .section .rdata,"dr"
|
||||
; CHECK-NOT: .section ".rodata.str1.1"
|
||||
|
||||
|
@ -7,6 +7,6 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: .section .CRT$XCU,"rd"
|
||||
; CHECK: .section .CRT$XCU,"dr"
|
||||
; CHECK: .long function
|
||||
|
||||
|
@ -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
|
||||
|
@ -37,7 +37,7 @@ 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
|
||||
|
||||
|
@ -58,7 +58,7 @@ 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
|
||||
|
||||
|
@ -48,7 +48,7 @@ define void @F1() {
|
||||
; LINUX-SECTIONS: .section .rodata.G3,"a",@progbits
|
||||
; LINUX-SECTIONS: .globl G3
|
||||
|
||||
; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G3
|
||||
; WIN32-SECTIONS: .section .rdata,"dr",one_only,_G3
|
||||
; WIN32-SECTIONS: .globl _G3
|
||||
|
||||
|
||||
@ -124,7 +124,7 @@ define void @F1() {
|
||||
; LINUX-SECTIONS: .section .rodata.str1.1,"aMS",@progbits,1
|
||||
; LINUX-SECTIONS: .globl G7
|
||||
|
||||
; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G7
|
||||
; WIN32-SECTIONS: .section .rdata,"dr",one_only,_G7
|
||||
; WIN32-SECTIONS: .globl _G7
|
||||
|
||||
|
||||
@ -187,7 +187,7 @@ define void @F1() {
|
||||
; LINUX-SECTIONS: .asciz "foo"
|
||||
; LINUX-SECTIONS: .size .LG14, 4
|
||||
|
||||
; WIN32-SECTIONS: .section .rdata,"rd"
|
||||
; WIN32-SECTIONS: .section .rdata,"dr"
|
||||
; WIN32-SECTIONS: L_G14:
|
||||
; WIN32-SECTIONS: .asciz "foo"
|
||||
|
||||
@ -209,5 +209,5 @@ define void @F1() {
|
||||
; LINUX-SECTIONS: .section .rodata.cst8,"aM",@progbits,8
|
||||
; LINUX-SECTIONS: G15:
|
||||
|
||||
; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G15
|
||||
; WIN32-SECTIONS: .section .rdata,"dr",one_only,_G15
|
||||
; WIN32-SECTIONS: _G15:
|
||||
|
@ -6,7 +6,7 @@ define double @double() {
|
||||
ret double 0x0000000000800000
|
||||
}
|
||||
; CHECK: .globl __real@0000000000800000
|
||||
; CHECK-NEXT: .section .rdata,"rd",discard,__real@0000000000800000
|
||||
; CHECK-NEXT: .section .rdata,"dr",discard,__real@0000000000800000
|
||||
; CHECK-NEXT: .align 8
|
||||
; CHECK-NEXT: __real@0000000000800000:
|
||||
; CHECK-NEXT: .quad 8388608
|
||||
@ -18,7 +18,7 @@ define <4 x i32> @vec1() {
|
||||
ret <4 x i32> <i32 3, i32 2, i32 1, i32 0>
|
||||
}
|
||||
; CHECK: .globl __xmm@00000000000000010000000200000003
|
||||
; CHECK-NEXT: .section .rdata,"rd",discard,__xmm@00000000000000010000000200000003
|
||||
; CHECK-NEXT: .section .rdata,"dr",discard,__xmm@00000000000000010000000200000003
|
||||
; CHECK-NEXT: .align 16
|
||||
; CHECK-NEXT: __xmm@00000000000000010000000200000003:
|
||||
; CHECK-NEXT: .long 3
|
||||
@ -33,7 +33,7 @@ define <8 x i16> @vec2() {
|
||||
ret <8 x i16> <i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>
|
||||
}
|
||||
; CHECK: .globl __xmm@00000001000200030004000500060007
|
||||
; CHECK-NEXT: .section .rdata,"rd",discard,__xmm@00000001000200030004000500060007
|
||||
; CHECK-NEXT: .section .rdata,"dr",discard,__xmm@00000001000200030004000500060007
|
||||
; CHECK-NEXT: .align 16
|
||||
; CHECK-NEXT: __xmm@00000001000200030004000500060007:
|
||||
; CHECK-NEXT: .short 7
|
||||
@ -53,7 +53,7 @@ define <4 x float> @undef1() {
|
||||
ret <4 x float> <float 1.0, float 1.0, float undef, float undef>
|
||||
|
||||
; CHECK: .globl __xmm@00000000000000003f8000003f800000
|
||||
; CHECK-NEXT: .section .rdata,"rd",discard,__xmm@00000000000000003f8000003f800000
|
||||
; CHECK-NEXT: .section .rdata,"dr",discard,__xmm@00000000000000003f8000003f800000
|
||||
; CHECK-NEXT: .align 16
|
||||
; CHECK-NEXT: __xmm@00000000000000003f8000003f800000:
|
||||
; CHECK-NEXT: .long 1065353216 # float 1
|
||||
|
@ -22,7 +22,7 @@
|
||||
; X86-NEXT: L{{.*}}:
|
||||
; X86-NEXT: [[END_OF_F:^L.*]]:
|
||||
;
|
||||
; X86-LABEL: .section .debug$S,"rd"
|
||||
; X86-LABEL: .section .debug$S,"dr"
|
||||
; X86-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X86-NEXT: .long 241
|
||||
@ -127,7 +127,7 @@
|
||||
; X64-NEXT: .L{{.*}}:
|
||||
; X64-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X64-LABEL: .section .debug$S,"rd"
|
||||
; X64-LABEL: .section .debug$S,"dr"
|
||||
; X64-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X64-NEXT: .long 241
|
||||
|
@ -29,7 +29,7 @@
|
||||
; X86-NEXT: L{{.*}}:
|
||||
; X86-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X86-LABEL: .section .debug$S,"rd"
|
||||
; X86-LABEL: .section .debug$S,"dr"
|
||||
; X86-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X86-NEXT: .long 241
|
||||
@ -159,7 +159,7 @@
|
||||
; X64-NEXT: .L{{.*}}:
|
||||
; X64-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X64-LABEL: .section .debug$S,"rd"
|
||||
; X64-LABEL: .section .debug$S,"dr"
|
||||
; X64-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X64-NEXT: .long 241
|
||||
|
@ -53,7 +53,7 @@
|
||||
; X86-NEXT: L{{.*}}:
|
||||
; X86-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X86-LABEL: .section .debug$S,"rd"
|
||||
; X86-LABEL: .section .debug$S,"dr"
|
||||
; X86-NEXT: .long 4
|
||||
; Symbol subsection for x
|
||||
; X86-NEXT: .long 241
|
||||
@ -317,7 +317,7 @@
|
||||
; X64-NEXT: .L{{.*}}:
|
||||
; X64-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X64-LABEL: .section .debug$S,"rd"
|
||||
; X64-LABEL: .section .debug$S,"dr"
|
||||
; X64-NEXT: .long 4
|
||||
; Symbol subsection for x
|
||||
; X64-NEXT: .long 241
|
||||
|
@ -20,7 +20,7 @@
|
||||
; X86-NEXT: L{{.*}}:
|
||||
; X86-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X86-LABEL: .section .debug$S,"rd"
|
||||
; X86-LABEL: .section .debug$S,"dr"
|
||||
; X86-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X86-NEXT: .long 241
|
||||
@ -118,7 +118,7 @@
|
||||
; X64-NEXT: .L{{.*}}:
|
||||
; X64-NEXT: [[END_OF_F:.*]]:
|
||||
;
|
||||
; X64-LABEL: .section .debug$S,"rd"
|
||||
; X64-LABEL: .section .debug$S,"dr"
|
||||
; X64-NEXT: .long 4
|
||||
; Symbol subsection
|
||||
; X64-NEXT: .long 241
|
||||
|
@ -22,7 +22,7 @@
|
||||
; X86-NEXT: [[END_OF_BAR:^L.*]]:{{$}}
|
||||
; X86-NOT: ret
|
||||
|
||||
; X86-LABEL: .section .debug$S,"rd"
|
||||
; X86-LABEL: .section .debug$S,"dr"
|
||||
; X86: .secrel32 "?bar@@YAXHZZ"
|
||||
; X86-NEXT: .secidx "?bar@@YAXHZZ"
|
||||
; X86: .long 0
|
||||
|
@ -6,7 +6,7 @@
|
||||
; CHECK: .section .apple_types
|
||||
|
||||
; RUN: llc -mtriple=i686-pc-win32 -filetype=asm -O0 < %s | FileCheck -check-prefix=WIN32 %s
|
||||
; WIN32: .section .debug$S,"rd"
|
||||
; WIN32: .section .debug$S,"dr"
|
||||
|
||||
; RUN: llc -mtriple=i686-pc-win32 -filetype=null -O0 < %s
|
||||
|
||||
|
@ -7,4 +7,4 @@
|
||||
|
||||
$thingy_linkonce = comdat any
|
||||
@thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer, comdat, align 4
|
||||
; CHECK: .section .bss,"wb",discard,_thingy_linkonce
|
||||
; CHECK: .section .bss,"bw",discard,_thingy_linkonce
|
||||
|
@ -5,7 +5,7 @@ define void @f() {
|
||||
}
|
||||
|
||||
@ptr = constant void ()* @f, section ".CRT$XLB", align 8
|
||||
; CHECK: .section .CRT$XLB,"rd"
|
||||
; CHECK: .section .CRT$XLB,"dr"
|
||||
|
||||
@weak_array = weak_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void ()* @f to i8*)]
|
||||
; CHECK: .section .rdata,"rd"
|
||||
; CHECK: .section .rdata,"dr"
|
||||
|
@ -49,17 +49,17 @@ define i32 @main() nounwind {
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
; WIN32: .section .CRT$XCU,"rd"
|
||||
; WIN32: .section .CRT$XCU,"dr"
|
||||
; WIN32: a_global_ctor
|
||||
; WIN32: .section .CRT$XCU,"rd",associative,{{_?}}b
|
||||
; WIN32: .section .CRT$XCU,"dr",associative,{{_?}}b
|
||||
; WIN32: b_global_ctor
|
||||
; WIN32-NOT: c_global_ctor
|
||||
; WIN32: .section .CRT$XTX,"rd"
|
||||
; WIN32: .section .CRT$XTX,"dr"
|
||||
; WIN32: a_global_dtor
|
||||
; MINGW32: .section .ctors,"wd"
|
||||
; MINGW32: .section .ctors,"dw"
|
||||
; MINGW32: a_global_ctor
|
||||
; MINGW32: .section .ctors,"wd",associative,{{_?}}b
|
||||
; MINGW32: .section .ctors,"dw",associative,{{_?}}b
|
||||
; MINGW32: b_global_ctor
|
||||
; MINGW32-NOT: c_global_ctor
|
||||
; MINGW32: .section .dtors,"wd"
|
||||
; MINGW32: .section .dtors,"dw"
|
||||
; MINGW32: a_global_dtor
|
||||
|
@ -3,5 +3,5 @@
|
||||
|
||||
@data = dllexport constant [5 x i8] c"data\00", align 1
|
||||
|
||||
; CHECK: .section .rdata,"rd"
|
||||
; CHECK: .section .rdata,"dr"
|
||||
|
||||
|
@ -3,5 +3,5 @@
|
||||
// CHECK: .section .klaatu,"wn"
|
||||
.section .barada,"y"
|
||||
// CHECK: .section .barada,"y"
|
||||
.section .nikto,"wds"
|
||||
// CHECK: .section .nikto,"wds"
|
||||
.section .nikto,"dws"
|
||||
// CHECK: .section .nikto,"dws"
|
||||
|
Loading…
x
Reference in New Issue
Block a user