[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