For now, we have not parse section flag `Info` in asm file. When we emit a section with info flag to asm, then compile asm to obj we will lose the Info flag for the section.
The motivation of this change is ARM64EC's hybmp$x section. If we lose the Info flag MSVC link will report a warning:
`warning LNK4078: multiple '.hybmp' sections found with different attributes`
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D136125
bool COFFAsmParser::ParseSectionFlags(StringRef SectionName,
StringRef FlagsString, unsigned *Flags) {
enum {
- None = 0,
- Alloc = 1 << 0,
- Code = 1 << 1,
- Load = 1 << 2,
- InitData = 1 << 3,
- Shared = 1 << 4,
- NoLoad = 1 << 5,
- NoRead = 1 << 6,
- NoWrite = 1 << 7,
+ None = 0,
+ Alloc = 1 << 0,
+ Code = 1 << 1,
+ Load = 1 << 2,
+ InitData = 1 << 3,
+ Shared = 1 << 4,
+ NoLoad = 1 << 5,
+ NoRead = 1 << 6,
+ NoWrite = 1 << 7,
Discardable = 1 << 8,
+ Info = 1 << 9,
};
bool ReadOnlyRemoved = false;
SecFlags |= NoRead | NoWrite;
break;
+ case 'i': // info
+ SecFlags |= Info;
+ break;
+
default:
return TokError("unknown flag");
}
*Flags |= COFF::IMAGE_SCN_MEM_WRITE;
if (SecFlags & Shared)
*Flags |= COFF::IMAGE_SCN_MEM_SHARED;
+ if (SecFlags & Info)
+ *Flags |= COFF::IMAGE_SCN_LNK_INFO;
return false;
}
if ((getCharacteristics() & COFF::IMAGE_SCN_MEM_DISCARDABLE) &&
!isImplicitlyDiscardable(getName()))
OS << 'D';
+ if (getCharacteristics() & COFF::IMAGE_SCN_LNK_INFO)
+ OS << 'i';
OS << '"';
if (getCharacteristics() & COFF::IMAGE_SCN_LNK_COMDAT) {
}
; CHECK: .lcomm .L_MergedGlobals,8,4
-; CHECK: .section .drectve,"yn"
+; CHECK: .section .drectve,"yni"
; CHECK: .ascii " /EXPORT:y,DATA"
; CHECK: .globl x
; CHECK: .set x, .L_MergedGlobals
ret void
}
-; CHECK: .section .drectve,"yn"
+; CHECK: .section .drectve,"yni"
; CHECK: .ascii " /DEFAULTLIB:msvcrt.lib"
; CHECK: .ascii " /DEFAULTLIB:msvcrt.lib"
; CHECK: .ascii " /DEFAULTLIB:secur32.lib"
.section s_w,"w"; .long 1
.section s_x,"x"; .long 1
.section s_y,"y"; .long 1
+.section s_i,"i"; .long 1
// CHECK: Section {
// CHECK: Name: s
// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES
// CHECK-NEXT: ]
// CHECK: }
+// CHECK: Section {
+// CHECK: Name: s_i
+// CHECK: Characteristics [
+// CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES
+// CHECK-NEXT: IMAGE_SCN_LNK_INFO
+// CHECK-NEXT: IMAGE_SCN_MEM_READ
+// CHECK-NEXT: IMAGE_SCN_MEM_WRITE
+// CHECK-NEXT: ]
+// CHECK: }
// w makes read-only to readable
.section s_rw,"rw"; .long 1