[lld] r330481 - COFF: Preserve section type when processing /section flag.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 20 14:23:16 PDT 2018
Author: pcc
Date: Fri Apr 20 14:23:16 2018
New Revision: 330481
URL: http://llvm.org/viewvc/llvm-project?rev=330481&view=rev
Log:
COFF: Preserve section type when processing /section flag.
It turns out that we were dropping this before.
Differential Revision: https://reviews.llvm.org/D45802
Modified:
lld/trunk/COFF/Chunks.cpp
lld/trunk/COFF/Chunks.h
lld/trunk/COFF/Writer.cpp
lld/trunk/test/COFF/output-chars.test
lld/trunk/test/COFF/section.test
Modified: lld/trunk/COFF/Chunks.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.cpp?rev=330481&r1=330480&r2=330481&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.cpp (original)
+++ lld/trunk/COFF/Chunks.cpp Fri Apr 20 14:23:16 2018
@@ -388,7 +388,7 @@ bool SectionChunk::hasData() const {
}
uint32_t SectionChunk::getOutputCharacteristics() const {
- return Header->Characteristics & PermMask;
+ return Header->Characteristics & (PermMask | TypeMask);
}
bool SectionChunk::isCOMDAT() const {
Modified: lld/trunk/COFF/Chunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.h?rev=330481&r1=330480&r2=330481&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.h (original)
+++ lld/trunk/COFF/Chunks.h Fri Apr 20 14:23:16 2018
@@ -38,9 +38,11 @@ class ObjFile;
class OutputSection;
class Symbol;
-// Mask for section types (code, data, bss, disacardable, etc.)
-// and permissions (writable, readable or executable).
-const uint32_t PermMask = 0xFF0000F0;
+// Mask for permissions (discardable, writable, readable, executable, etc).
+const uint32_t PermMask = 0xFE000000;
+
+// Mask for section types (code, data, bss).
+const uint32_t TypeMask = 0x000000E0;
// A Chunk represents a chunk of data that will occupy space in the
// output (if the resolver chose that). It may or may not be backed by
Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=330481&r1=330480&r2=330481&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Fri Apr 20 14:23:16 2018
@@ -237,7 +237,8 @@ void OutputSection::addChunk(Chunk *C) {
}
void OutputSection::setPermissions(uint32_t C) {
- Header.Characteristics = C & PermMask;
+ Header.Characteristics &= ~PermMask;
+ Header.Characteristics |= C;
}
void OutputSection::merge(OutputSection *Other) {
Modified: lld/trunk/test/COFF/output-chars.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/output-chars.test?rev=330481&r1=330480&r2=330481&view=diff
==============================================================================
--- lld/trunk/test/COFF/output-chars.test (original)
+++ lld/trunk/test/COFF/output-chars.test Fri Apr 20 14:23:16 2018
@@ -23,6 +23,7 @@
# SECTION: Name: .foo
# SECTION: Characteristics [
+# SECTION-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# SECTION-NEXT: IMAGE_SCN_MEM_EXECUTE
# SECTION-NEXT: IMAGE_SCN_MEM_READ
# SECTION-NEXT: IMAGE_SCN_MEM_WRITE
@@ -30,6 +31,7 @@
# SECTION: Name: .foo
# SECTION: Characteristics [
+# SECTION-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# SECTION-NEXT: IMAGE_SCN_MEM_EXECUTE
# SECTION-NEXT: IMAGE_SCN_MEM_READ
# SECTION-NEXT: IMAGE_SCN_MEM_WRITE
@@ -76,6 +78,7 @@
# MERGE-SECTION: Name: .foo
# MERGE-SECTION: Characteristics [
+# MERGE-SECTION-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# MERGE-SECTION-NEXT: IMAGE_SCN_MEM_EXECUTE
# MERGE-SECTION-NEXT: IMAGE_SCN_MEM_READ
# MERGE-SECTION-NEXT: IMAGE_SCN_MEM_WRITE
Modified: lld/trunk/test/COFF/section.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/section.test?rev=330481&r1=330480&r2=330481&view=diff
==============================================================================
--- lld/trunk/test/COFF/section.test (original)
+++ lld/trunk/test/COFF/section.test Fri Apr 20 14:23:16 2018
@@ -16,18 +16,22 @@
# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=S %s
# R: Characteristics [
+# R-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# R-NEXT: IMAGE_SCN_MEM_READ
# R-NEXT: ]
# W: Characteristics [
+# W-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# W-NEXT: IMAGE_SCN_MEM_WRITE
# W-NEXT: ]
# E: Characteristics [
+# E-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# E-NEXT: IMAGE_SCN_MEM_EXECUTE
# E-NEXT: ]
# S: Characteristics [
+# S-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
# S-NEXT: IMAGE_SCN_MEM_SHARED
# S-NEXT: ]
More information about the llvm-commits
mailing list