From cb00947b9e9f48acfd1661cc0dfaff75a5fbbb07 Mon Sep 17 00:00:00 2001 From: midipix Date: Sun, 30 Jun 2019 16:36:45 +0000 Subject: binutils-2.24.51: pe_dll_generate_dsolib(): support symbol vector as input. --- binutils-2.24.51.midipix.patch | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'binutils-2.24.51.midipix.patch') 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 *); -- cgit v1.2.3