summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2019-06-30 16:36:45 +0000
committermidipix <writeonce@midipix.org>2019-06-30 16:48:28 +0000
commitcb00947b9e9f48acfd1661cc0dfaff75a5fbbb07 (patch)
tree82576b07d322a37d71cf8fd8deb5ee10c1cd5d20
parent5a4d21db41d11ec5096e8debfa650cb1f5cda586 (diff)
downloadchainport-cb00947b9e9f48acfd1661cc0dfaff75a5fbbb07.tar.bz2
chainport-cb00947b9e9f48acfd1661cc0dfaff75a5fbbb07.tar.xz
binutils-2.24.51: pe_dll_generate_dsolib(): support symbol vector as input.
-rw-r--r--binutils-2.24.51.midipix.patch28
1 files changed, 19 insertions, 9 deletions
diff --git a/binutils-2.24.51.midipix.patch b/binutils-2.24.51.midipix.patch
index 26c583d..de04683 100644
--- a/binutils-2.24.51.midipix.patch
+++ b/binutils-2.24.51.midipix.patch
@@ -150,7 +150,7 @@ diff -ru --new-file a/ld/emultempl/pe.em b/ld/emultempl/pe.em
+
+ /* generate mdso implib? */
+ if (pe_dsolib_filename)
-+ pe_dll_generate_dsolib (pe_def_file, pe_dsolib_filename, pe_dsolib_loader_path, 32);
++ pe_dll_generate_dsolib (pe_def_file, 0, pe_dsolib_filename, pe_dsolib_loader_path, 32);
}
#if defined(TARGET_IS_shpe)
/* ARM doesn't need relocs. */
@@ -294,7 +294,7 @@ diff -ru --new-file a/ld/emultempl/pep.em b/ld/emultempl/pep.em
+
+ /* generate mdso implib? */
+ if (pep_dsolib_filename)
-+ pep_dll_generate_dsolib (pep_def_file, pep_dsolib_filename, pep_dsolib_loader_path, 64);
++ pep_dll_generate_dsolib (pep_def_file, 0, pep_dsolib_filename, pep_dsolib_loader_path, 64);
}
if (pep_out_def_filename)
@@ -511,7 +511,7 @@ diff -ru --new-file a/binutils/winduni.c b/binutils/winduni.c
{ 737, "MS-GREEK" },
diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
--- a/ld/pe-dll.c 2014-07-03 01:37:48.000000000 -0400
-+++ b/ld/pe-dll.c 2017-10-14 19:49:19.492911435 -0400
++++ b/ld/pe-dll.c 2019-06-30 22:22:22.643202346 -0400
@@ -27,6 +27,7 @@
#include "safe-ctype.h"
@@ -636,7 +636,7 @@ diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
exported_symbol_sections[i] = blhe->u.def.section;
else
exported_symbol_sections[i] = blhe->u.c.p->section;
-@@ -2688,6 +2728,150 @@
+@@ -2688,6 +2728,160 @@
}
@@ -645,6 +645,7 @@ diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
+void
+pe_dll_generate_dsolib(
+ def_file * def,
++ const char ** expsyms,
+ const char * dsolib_file_name,
+ const char * loader_path,
+ unsigned char bits)
@@ -743,13 +744,22 @@ diff -ru a/ld/pe-dll.c b/ld/pe-dll.c
+ free(mdso_exe_path);
+
+ /* parent: expsyms --> pipe */
-+ for (i=0; i < def->num_exports; i++) {
-+ if (!(pe_def_file->exports[i].flag_private)) {
-+ if (fprintf(fout,"%s\n",def->exports[i].name) < 0) {
++ if (expsyms) {
++ for (; *expsyms; ) {
++ if (fprintf(fout,"%s\n",*expsyms++) < 0) {
+ fprintf(stderr,"%s: pipe write operation failed.\n",program_name);
+ xexit(EXIT_FAILURE);
+ }
+ }
++ } else {
++ for (i=0; i < def->num_exports; i++) {
++ if (!(pe_def_file->exports[i].flag_private)) {
++ if (fprintf(fout,"%s\n",def->exports[i].name) < 0) {
++ fprintf(stderr,"%s: pipe write operation failed.\n",program_name);
++ xexit(EXIT_FAILURE);
++ }
++ }
++ }
+ }
+
+ if (fflush(fout) < 0) {
@@ -795,7 +805,7 @@ diff -ru a/ld/pe-dll.h b/ld/pe-dll.h
extern void pe_dll_generate_implib
(def_file *, const char *, struct bfd_link_info *);
+extern void pe_dll_generate_dsolib
-+ (def_file *, const char *, const char *, unsigned char);
++ (def_file *, const char **, const char *, const char *, unsigned char);
extern void pe_process_import_defs
(bfd *, struct bfd_link_info *);
extern bfd_boolean pe_implied_import_dll
@@ -817,7 +827,7 @@ diff -ru a/ld/pep-dll.h b/ld/pep-dll.h
extern void pep_dll_add_excludes (const char *, const exclude_type);
extern void pep_dll_generate_def_file (const char *);
extern void pep_dll_generate_implib (def_file *, const char *, struct bfd_link_info *);
-+extern void pep_dll_generate_dsolib (def_file *, const char *, const char *, unsigned char);
++extern void pep_dll_generate_dsolib (def_file *, const char **, const char *, const char *, unsigned char);
extern void pep_process_import_defs (bfd *, struct bfd_link_info *);
extern bfd_boolean pep_implied_import_dll (const char *);
extern void pep_dll_build_sections (bfd *, struct bfd_link_info *);