[PATCH] [lld][PECOFF] Add DISCARDABLE characteristic to .reloc section

Ron Ofir ron.ofir at gmail.com
Fri Sep 6 06:40:42 PDT 2013


Hi rui314,

This patch sets the IMAGE_SCN_MEM_DISCARDABLE characteristic to the base relocations section in order to match MS PECOFF specification.

http://llvm-reviews.chandlerc.com/D1617

Files:
  lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
  test/pecoff/base-reloc.test

Index: lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
===================================================================
--- lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
+++ lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
@@ -702,7 +714,8 @@
   // When loaded into memory, reloc section should be readable and writable.
   static const uint32_t characteristics =
       llvm::COFF::IMAGE_SCN_MEM_READ |
-      llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA;
+      llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
+      llvm::COFF::IMAGE_SCN_MEM_DISCARDABLE;
 
   // Returns a list of RVAs that needs to be relocated if the binary is loaded
   // at an address different from its preferred one.
Index: test/pecoff/base-reloc.test
===================================================================
--- test/pecoff/base-reloc.test
+++ test/pecoff/base-reloc.test
@@ -20,7 +20,7 @@
 NOBASEREL-SECTION-NOT: Contents of section .reloc:
 
 # RUN: lld -flavor link /out:%t1 /subsystem:console /force /opt:noref \
-# RUN:   -- %t.obj && llvm-readobj -file-headers %t1 \
+# RUN:   -- %t.obj && llvm-readobj -file-headers -sections %t1 \
 # RUN:   | FileCheck %s --check-prefix=BASEREL-HEADER
 #
 # RUN: lld -flavor link /out:%t1 /subsystem:console /force /opt:noref /fixed \
@@ -30,3 +30,18 @@
 BASEREL-HEADER-NOT: IMAGE_FILE_RELOCS_STRIPPED
 
 NOBASEREL-HEADER: IMAGE_FILE_RELOCS_STRIPPED
+
+BASEREL-HEADER:     Name: .reloc (2E 72 65 6C 6F 63 00 00)
+BASEREL-HEADER-NEXT:     VirtualSize: 0xC
+BASEREL-HEADER-NEXT:     VirtualAddress: 0x3000
+BASEREL-HEADER-NEXT:     RawDataSize: 512
+BASEREL-HEADER-NEXT:     PointerToRawData: 0x600
+BASEREL-HEADER-NEXT:     PointerToRelocations: 0x0
+BASEREL-HEADER-NEXT:     PointerToLineNumbers: 0x0
+BASEREL-HEADER-NEXT:     RelocationCount: 0
+BASEREL-HEADER-NEXT:     LineNumberCount: 0
+BASEREL-HEADER-NEXT:     Characteristics [ (0x42000040)
+BASEREL-HEADER-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
+BASEREL-HEADER-NEXT:       IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
+BASEREL-HEADER-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
+BASEREL-HEADER-NEXT:     ]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1617.1.patch
Type: text/x-patch
Size: 2077 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130906/2f9966b5/attachment.bin>


More information about the llvm-commits mailing list