This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] Exclude libmsvcrt and similar libraries from being autoexported from DLLs
- From: Martin Storsjo <martin at martin dot st>
- To: binutils at sourceware dot org
- Date: Thu, 23 Nov 2017 12:29:53 +0200
- Subject: [PATCH] Exclude libmsvcrt and similar libraries from being autoexported from DLLs
- Authentication-results: sourceware.org; auth=none
In the latest git version of mingw-w64, one can set the default
libmsvcrt.a to actually be the import library of another CRT version,
to facilitate switching to ucrtbase.dll. In these versions, the
traditional libmsvcrt.a (for linking to msvcrt.dll) is also provided
with the name libmsvcrt-os.a.
The import libraries for the CRT also contain a number of compatibility
wrapper functions. The ones in libmsvcrt.a have so far been excluded
automatically since they in most cases come with a corresponding
__imp_foo function. None of these make sense to export automatically
from a DLL though, so add these libraries to the exclude list.
libucrtbase.a contains a number of compatibility wrapper functions
that don't have a corresponding __imp_foo symbol, which cause
these symbols to be exported from DLLs.
This can be worked around on the mingw-w64 side by adding extra
__imp_ symbols, but since they aren't strictly necessary for linking
to succeed, it's probably better long-term to add these libraries to
the exclusion list.
ld/ChangeLog:
2017-11-23 Martin Storsjo <martin@martin.st>
* pe-dll.c: Exclude libmsvcrt, libmsvcrt-os and libucrtbase.
---
ld/ChangeLog | 4 ++++
ld/pe-dll.c | 3 +++
2 files changed, 7 insertions(+)
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 4cfcf6d8ba..b4abe6e1e6 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2017-11-23 Martin Storsjo <martin@martin.st>
+
+ * pe-dll.c: Exclude libmsvcrt, libmsvcrt-os and libucrtbase.
+
2017-11-21 Nick Clifton <nickc@redhat.com>
PR 22419
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index aee7b9dacb..d916766ea0 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -344,6 +344,9 @@ static const autofilter_entry_type autofilter_liblist[] =
{ STRING_COMMA_LEN ("libsupc++") },
{ STRING_COMMA_LEN ("libobjc") },
{ STRING_COMMA_LEN ("libgcj") },
+ { STRING_COMMA_LEN ("libmsvcrt") },
+ { STRING_COMMA_LEN ("libmsvcrt-os") },
+ { STRING_COMMA_LEN ("libucrtbase") },
{ NULL, 0 }
};
--
2.13.6 (Apple Git-96)