[lld] r320676 - [COFF] Sort .pdata for arm64
Martin Storsjo via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 14 00:56:29 PST 2017
Author: mstorsjo
Date: Thu Dec 14 00:56:29 2017
New Revision: 320676
URL: http://llvm.org/viewvc/llvm-project?rev=320676&view=rev
Log:
[COFF] Sort .pdata for arm64
This works for linking the output from the MSVC compiler.
The pdata entries for arm64 seem to be 8 bytes in the same
(or at least similar) form to arm.
Differential Revision: https://reviews.llvm.org/D41160
Added:
lld/trunk/test/COFF/pdata-arm64.yaml
Modified:
lld/trunk/COFF/Writer.cpp
Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=320676&r1=320675&r2=320676&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Thu Dec 14 00:56:29 2017
@@ -883,7 +883,7 @@ void Writer::sortExceptionTable() {
[](const Entry &A, const Entry &B) { return A.Begin < B.Begin; });
return;
}
- if (Config->Machine == ARMNT) {
+ if (Config->Machine == ARMNT || Config->Machine == ARM64) {
struct Entry { ulittle32_t Begin, Unwind; };
sort(parallel::par, (Entry *)Begin, (Entry *)End,
[](const Entry &A, const Entry &B) { return A.Begin < B.Begin; });
Added: lld/trunk/test/COFF/pdata-arm64.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdata-arm64.yaml?rev=320676&view=auto
==============================================================================
--- lld/trunk/test/COFF/pdata-arm64.yaml (added)
+++ lld/trunk/test/COFF/pdata-arm64.yaml Thu Dec 14 00:56:29 2017
@@ -0,0 +1,87 @@
+# RUN: yaml2obj < %s > %t.obj
+#
+# RUN: lld-link /out:%t.exe /entry:func1 /subsystem:console %t.obj
+# RUN: llvm-objdump -s -section=.pdata %t.exe | FileCheck -check-prefix=PDATA %s
+
+# PDATA: 00200000 2500a100 24200000 31002201
+
+--- !COFF
+header:
+ Machine: IMAGE_FILE_MACHINE_ARM64
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: ff4300d1f37b00a9f303012a00000094e003132a00000094f37b40a9ff430091c0035fd6f353bea9fe0b00f9f303012af403022a00000094e003132a00000094e003142a00000094fe0b40f9f353c2a8c0035fd6c0035fd6
+ Relocations:
+ - VirtualAddress: 12
+ SymbolName: func3
+ Type: IMAGE_REL_ARM64_BRANCH26
+ - VirtualAddress: 20
+ SymbolName: func3
+ Type: IMAGE_REL_ARM64_BRANCH26
+ - VirtualAddress: 52
+ SymbolName: func3
+ Type: IMAGE_REL_ARM64_BRANCH26
+ - VirtualAddress: 60
+ SymbolName: func3
+ Type: IMAGE_REL_ARM64_BRANCH26
+ - VirtualAddress: 68
+ SymbolName: func3
+ Type: IMAGE_REL_ARM64_BRANCH26
+ - Name: .pdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 0000000031002201000000002500a100
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: func2
+ Type: IMAGE_REL_ARM64_ADDR32NB
+ - VirtualAddress: 8
+ SymbolName: func1
+ Type: IMAGE_REL_ARM64_ADDR32NB
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 57
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: .pdata
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 16
+ NumberOfRelocations: 2
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 2
+ - Name: func1
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: func2
+ Value: 36
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: func3
+ Value: 84
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
More information about the llvm-commits
mailing list