Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/Driver.cpp10
-rw-r--r--lld/test/COFF/entry-mangled.test33
2 files changed, 43 insertions, 0 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index bde1a6c56001..b07cb995249c 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -580,6 +580,16 @@ bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
break;
}
+ // Windows specific -- if entry point is not found,
+ // search for its mangled names.
+ if (!Config->EntryName.empty() && !Symtab.find(Config->EntryName)) {
+ StringRef Name;
+ Symbol *Sym;
+ std::tie(Name, Sym) = Symtab.findMangled(Config->EntryName);
+ if (Sym)
+ Symtab.rename(Config->EntryName, Name);
+ }
+
// Windows specific -- resolve dllexported symbols.
for (Export &E : Config->Exports) {
StringRef Name;
diff --git a/lld/test/COFF/entry-mangled.test b/lld/test/COFF/entry-mangled.test
new file mode 100644
index 000000000000..770594093be1
--- /dev/null
+++ b/lld/test/COFF/entry-mangled.test
@@ -0,0 +1,33 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld -flavor link2 /out:%t.exe /entry:main %t.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: '?main@@YAHXZ'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...