From 3d636edc56a56789a6911e84b315491496cfcd8c Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Fri, 20 Apr 2018 21:32:37 +0000 Subject: [PATCH] COFF: Merge .xdata into .rdata by default. Differential Revision: https://reviews.llvm.org/D45804 llvm-svn: 330484 --- lld/COFF/Driver.cpp | 1 + lld/test/COFF/icf-xdata.s | 22 +++++++++++++++++----- lld/test/COFF/pdb.test | 20 ++------------------ lld/test/COFF/unwind.test | 10 +++++----- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index de09338..7390558 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1109,6 +1109,7 @@ void LinkerDriver::link(ArrayRef ArgsArr) { parseMerge(".idata=.rdata"); parseMerge(".didat=.rdata"); parseMerge(".edata=.rdata"); + parseMerge(".xdata=.rdata"); parseMerge(".bss=.data"); // Handle /section diff --git a/lld/test/COFF/icf-xdata.s b/lld/test/COFF/icf-xdata.s index 8fb4bad..ec7f625 100644 --- a/lld/test/COFF/icf-xdata.s +++ b/lld/test/COFF/icf-xdata.s @@ -1,13 +1,25 @@ # RUN: llvm-mc %s -triple x86_64-windows-msvc -filetype=obj -o %t.obj +# RUN: lld-link %t.obj -dll -noentry -out:%t.dll -merge:.xdata=.xdata 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN +# RUN: llvm-readobj -sections %t.dll | FileCheck %s --check-prefix=XDATA # RUN: lld-link %t.obj -dll -noentry -out:%t.dll -# RUN: llvm-readobj -sections %t.dll | FileCheck %s +# RUN: llvm-readobj -sections %t.dll | FileCheck %s --check-prefix=RDATA # There shouldn't be much xdata, because all three .pdata entries (12 bytes # each) should use the same .xdata unwind info. -# CHECK: Name: .pdata -# CHECK-NEXT: VirtualSize: 0x24 -# CHECK: Name: .xdata -# CHECK-NEXT: VirtualSize: 0x8 +# XDATA: Name: .rdata +# XDATA-NEXT: VirtualSize: 0x73 +# XDATA: Name: .pdata +# XDATA-NEXT: VirtualSize: 0x24 +# XDATA: Name: .xdata +# XDATA-NEXT: VirtualSize: 0x8 +# +# WARN: warning: .xdata=.rdata: already merged into .xdata +# +# RDATA: Name: .rdata +# RDATA-NEXT: VirtualSize: 0x7C +# RDATA: Name: .pdata +# RDATA-NEXT: VirtualSize: 0x24 .text callee: diff --git a/lld/test/COFF/pdb.test b/lld/test/COFF/pdb.test index e091fd4..66be0c4 100644 --- a/lld/test/COFF/pdb.test +++ b/lld/test/COFF/pdb.test @@ -245,19 +245,6 @@ RAW-NEXT: 0 number of line numbers RAW-NEXT: 40000040 flags RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA RAW-NEXT: IMAGE_SCN_MEM_READ -RAW: SECTION HEADER #4 -RAW-NEXT: .xdata name -RAW-NEXT: 8 virtual size -RAW-NEXT: 4000 virtual address -RAW-NEXT: 200 size of raw data -RAW-NEXT: A00 file pointer to raw data -RAW-NEXT: 0 file pointer to relocation table -RAW-NEXT: 0 file pointer to line numbers -RAW-NEXT: 0 number of relocations -RAW-NEXT: 0 number of line numbers -RAW-NEXT: 40000040 flags -RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA -RAW-NEXT: IMAGE_SCN_MEM_READ RAW: Original Section Headers RAW-NEXT: ============================================================ RAW-NEXT: PDB does not contain the requested image section header type @@ -274,9 +261,9 @@ RAW-NEXT: SC[.rdata] | mod = 2, 0002:0000, size = {{[0-9]+}}, data crc = 0, r RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ RAW-NEXT: SC[.rdata] | mod = 2, 0002:0028, size = {{[0-9]+}}, data crc = 0, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ -RAW-NEXT: SC[.pdata] | mod = 0, 0003:0000, size = 12, data crc = 361370162, reloc crc = 0 +RAW-NEXT: SC[.rdata] | mod = 0, 0002:0148, size = {{[0-9]+}}, data crc = 264583633, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -RAW-NEXT: SC[.xdata] | mod = 0, 0004:0000, size = {{[0-9]+}}, data crc = 264583633, reloc crc = 0 +RAW-NEXT: SC[.pdata] | mod = 0, 0003:0000, size = 12, data crc = 361370162, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ RAW-NOT: SC[ RAW: Section Map @@ -292,8 +279,5 @@ RAW-NEXT: Section 0002 | ovl = 0, group = 0, frame = 3, name = 65535 RAW-NEXT: class = 65535, offset = 0, size = RAW-NEXT: flags = read | 32 bit addr | selector RAW-NEXT: Section 0003 | ovl = 0, group = 0, frame = 4, name = 65535 -RAW-NEXT: class = 65535, offset = 0, size = -RAW-NEXT: flags = read | 32 bit addr | selector -RAW-NEXT: Section 0004 | ovl = 0, group = 0, frame = 5, name = 65535 RAW-NEXT: class = 65535, offset = 0, size = 4294967295 RAW-NEXT: flags = 32 bit addr | absolute addr diff --git a/lld/test/COFF/unwind.test b/lld/test/COFF/unwind.test index 674e243..5b74aa7 100644 --- a/lld/test/COFF/unwind.test +++ b/lld/test/COFF/unwind.test @@ -15,13 +15,13 @@ # HEADER-MERGE: ExceptionTableRVA: 0x2004 # HEADER-MERGE-NEXT: ExceptionTableSize: 0x30 # HEADER-MERGE: Name: .rdata -# HEADER-MERGE-NEXT: VirtualSize: 0x34 +# HEADER-MERGE-NEXT: VirtualSize: 0x78 # HEADER-MERGE-NEXT: VirtualAddress: 0x2000 # # UNWIND: Function Table: # UNWIND: Start Address: 0x1000 # UNWIND: End Address: 0x101b -# UNWIND: Unwind Info Address: 0x4000 +# UNWIND: Unwind Info Address: 0x2004 # UNWIND: Version: 1 # UNWIND: Flags: 1 UNW_ExceptionHandler # UNWIND: Size of prolog: 18 @@ -38,7 +38,7 @@ # UNWIND: Function Table: # UNWIND: Start Address: 0x1012 # UNWIND: End Address: 0x1012 -# UNWIND: Unwind Info Address: 0x401c +# UNWIND: Unwind Info Address: 0x2020 # UNWIND: Version: 1 # UNWIND: Flags: 4 UNW_ChainInfo # UNWIND: Size of prolog: 0 @@ -47,7 +47,7 @@ # UNWIND: Function Table: # UNWIND: Start Address: 0x101b # UNWIND: End Address: 0x101c -# UNWIND: Unwind Info Address: 0x402c +# UNWIND: Unwind Info Address: 0x2030 # UNWIND: Version: 1 # UNWIND: Flags: 0 # UNWIND: Size of prolog: 0 @@ -56,7 +56,7 @@ # UNWIND: Function Table: # UNWIND: Start Address: 0x101c # UNWIND: End Address: 0x1039 -# UNWIND: Unwind Info Address: 0x4034 +# UNWIND: Unwind Info Address: 0x2038 # UNWIND: Version: 1 # UNWIND: Flags: 0 # UNWIND: Size of prolog: 14 -- 2.7.4