mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 18:56:43 +00:00
[LLD][COFF] Preserve all attributes from forwarding exports from parsed .def files. (#86564)
It's similar to #86535, but for export specified in .def files.
This commit is contained in:
parent
4dc3225248
commit
603db7425f
@ -1032,19 +1032,18 @@ void LinkerDriver::parseModuleDefs(StringRef path) {
|
||||
|
||||
for (COFFShortExport e1 : m.Exports) {
|
||||
Export e2;
|
||||
// In simple cases, only Name is set. Renamed exports are parsed
|
||||
// and set as "ExtName = Name". If Name has the form "OtherDll.Func",
|
||||
// it shouldn't be a normal exported function but a forward to another
|
||||
// DLL instead. This is supported by both MS and GNU linkers.
|
||||
// Renamed exports are parsed and set as "ExtName = Name". If Name has
|
||||
// the form "OtherDll.Func", it shouldn't be a normal exported
|
||||
// function but a forward to another DLL instead. This is supported
|
||||
// by both MS and GNU linkers.
|
||||
if (!e1.ExtName.empty() && e1.ExtName != e1.Name &&
|
||||
StringRef(e1.Name).contains('.')) {
|
||||
e2.name = saver().save(e1.ExtName);
|
||||
e2.forwardTo = saver().save(e1.Name);
|
||||
ctx.config.exports.push_back(e2);
|
||||
continue;
|
||||
} else {
|
||||
e2.name = saver().save(e1.Name);
|
||||
e2.extName = saver().save(e1.ExtName);
|
||||
}
|
||||
e2.name = saver().save(e1.Name);
|
||||
e2.extName = saver().save(e1.ExtName);
|
||||
e2.aliasTarget = saver().save(e1.AliasTarget);
|
||||
e2.ordinal = e1.Ordinal;
|
||||
e2.noname = e1.Noname;
|
||||
|
@ -104,6 +104,11 @@ SYMTAB-FWD-PRIV-NOT: __imp_foo
|
||||
SYMTAB-FWD-PRIV-NEXT: exportfn3 in export.test.tmp-fwd-priv
|
||||
SYMTAB-FWD-PRIV-NOT: foo
|
||||
|
||||
# RUN: echo "EXPORTS foo=kernel32.foobar DATA PRIVATE" > %t-fwd-priv.def
|
||||
# RUN: lld-link /out:%t-fwd-priv-def.dll /dll %t.obj /def:%t-fwd-priv.def
|
||||
# RUN: llvm-objdump -p %t-fwd-priv-def.dll | FileCheck --check-prefix=FORWARDER %s
|
||||
# RUN: llvm-nm -M %t-fwd-priv-def.lib | FileCheck --check-prefix=SYMTAB-FWD-PRIV %s
|
||||
|
||||
# RUN: lld-link /out:%t-fwd-ord.dll /dll %t.obj /export:foo=kernel32.foobar,@3,NONAME
|
||||
# RUN: llvm-objdump -p %t-fwd-ord.dll | FileCheck --check-prefix=FORWARDER-ORD %s
|
||||
# RUN: llvm-nm -M %t-fwd-ord.lib | FileCheck --check-prefix=SYMTAB-FWD %s
|
||||
@ -115,6 +120,11 @@ FORWARDER-ORD-NEXT: Ordinal RVA Name
|
||||
FORWARDER-ORD-NEXT: 3 (forwarded to kernel32.foobar)
|
||||
FORWARDER-ORD-NEXT: 4 0x1010 exportfn3
|
||||
|
||||
# RUN: echo "EXPORTS foo=kernel32.foobar @3 NONAME" > %t-fwd-ord.def
|
||||
# RUN: lld-link /out:%t-fwd-ord-def.dll /dll %t.obj /def:%t-fwd-ord.def
|
||||
# RUN: llvm-objdump -p %t-fwd-ord-def.dll | FileCheck --check-prefix=FORWARDER-ORD %s
|
||||
# RUN: llvm-nm -M %t-fwd-ord-def.lib | FileCheck --check-prefix=SYMTAB-FWD %s
|
||||
|
||||
# RUN: lld-link /out:%t.dll /dll %t.obj /merge:.rdata=.text /export:exportfn1 /export:exportfn2
|
||||
# RUN: llvm-objdump -p %t.dll | FileCheck --check-prefix=MERGE --match-full-lines %s
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user