-
-
Notifications
You must be signed in to change notification settings - Fork 154
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
toolchain sync 2018.09, add binutils 2.31.1
- Loading branch information
Showing
8 changed files
with
222 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
112 changes: 112 additions & 0 deletions
112
...hain/binutils/patches/2.30/100-PR23254-ld.bfd-mishandles-file-pointers-while-scanni.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
From: Alan Modra <amodra@gmail.com> | ||
Date: Tue, 5 Jun 2018 21:04:00 +0930 | ||
Subject: [PATCH] PR23254, ld.bfd mishandles file pointers while scanning | ||
archive | ||
|
||
Best practice is to not mix lseek/read with fseek/fread on the same | ||
underlying file descriptor, as not all stdio implementations will cope. | ||
Since the plugin uses lseek/read while bfd uses fseek/fread this patch | ||
reopens the file for exclusive use by the plugin rather than trying to | ||
restore the file descriptor. That allows the plugin to read the file | ||
after plugin_call_claim_file too. | ||
|
||
bfd/ | ||
PR 23254 | ||
* plugin.c (bfd_plugin_open_input): Allow for possibility of | ||
nested archives. Open file again for plugin. | ||
(try_claim): Don't save and restore file position. Close file | ||
if not claimed. | ||
* sysdep.h (O_BINARY): Define. | ||
ld/ | ||
PR 23254 | ||
* plugin.c (plugin_call_claim_file): Revert 2016-07-19 patch. | ||
(plugin_object_p): Don't dup file descriptor. | ||
--- | ||
|
||
--- a/bfd/plugin.c | ||
+++ b/bfd/plugin.c | ||
@@ -165,14 +165,22 @@ bfd_plugin_open_input (bfd *ibfd, struct | ||
bfd *iobfd; | ||
|
||
iobfd = ibfd; | ||
- if (ibfd->my_archive && !bfd_is_thin_archive (ibfd->my_archive)) | ||
- iobfd = ibfd->my_archive; | ||
+ while (iobfd->my_archive | ||
+ && !bfd_is_thin_archive (iobfd->my_archive)) | ||
+ iobfd = iobfd->my_archive; | ||
file->name = iobfd->filename; | ||
|
||
if (!iobfd->iostream && !bfd_open_file (iobfd)) | ||
return 0; | ||
|
||
- file->fd = fileno ((FILE *) iobfd->iostream); | ||
+ /* The plugin API expects that the file descriptor won't be closed | ||
+ and reused as done by the bfd file cache. So open it again. | ||
+ dup isn't good enough. plugin IO uses lseek/read while BFD uses | ||
+ fseek/fread. It isn't wise to mix the unistd and stdio calls on | ||
+ the same underlying file descriptor. */ | ||
+ file->fd = open (file->name, O_RDONLY | O_BINARY); | ||
+ if (file->fd < 0) | ||
+ return 0; | ||
|
||
if (iobfd == ibfd) | ||
{ | ||
@@ -196,12 +204,12 @@ try_claim (bfd *abfd) | ||
int claimed = 0; | ||
struct ld_plugin_input_file file; | ||
|
||
+ file.handle = abfd; | ||
if (!bfd_plugin_open_input (abfd, &file)) | ||
return 0; | ||
- file.handle = abfd; | ||
- off_t cur_offset = lseek (file.fd, 0, SEEK_CUR); | ||
claim_file (&file, &claimed); | ||
- lseek (file.fd, cur_offset, SEEK_SET); | ||
+ if (!claimed) | ||
+ close (file.fd); | ||
return claimed; | ||
} | ||
|
||
--- a/bfd/sysdep.h | ||
+++ b/bfd/sysdep.h | ||
@@ -108,6 +108,10 @@ extern char *strrchr (); | ||
#ifndef O_ACCMODE | ||
#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR) | ||
#endif | ||
+/* Systems that don't already define this, don't need it. */ | ||
+#ifndef O_BINARY | ||
+#define O_BINARY 0 | ||
+#endif | ||
|
||
#ifndef SEEK_SET | ||
#define SEEK_SET 0 | ||
--- a/ld/plugin.c | ||
+++ b/ld/plugin.c | ||
@@ -1053,14 +1053,10 @@ plugin_call_claim_file (const struct ld_ | ||
{ | ||
if (curplug->claim_file_handler) | ||
{ | ||
- off_t cur_offset; | ||
enum ld_plugin_status rv; | ||
|
||
called_plugin = curplug; | ||
- cur_offset = lseek (file->fd, 0, SEEK_CUR); | ||
rv = (*curplug->claim_file_handler) (file, claimed); | ||
- if (!*claimed) | ||
- lseek (file->fd, cur_offset, SEEK_SET); | ||
called_plugin = NULL; | ||
if (rv != LDPS_OK) | ||
set_plugin_error (curplug->name); | ||
@@ -1126,12 +1122,6 @@ plugin_object_p (bfd *ibfd) | ||
} | ||
|
||
file.handle = input; | ||
- /* The plugin API expects that the file descriptor won't be closed | ||
- and reused as done by the bfd file cache. So dup one. */ | ||
- file.fd = dup (file.fd); | ||
- if (file.fd < 0) | ||
- return NULL; | ||
- | ||
input->abfd = abfd; | ||
input->view_buffer.addr = NULL; | ||
input->view_buffer.filesize = 0; |
22 changes: 22 additions & 0 deletions
22
toolchain/binutils/patches/2.31.1/300-001_ld_makefile_patch.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
--- a/ld/Makefile.am | ||
+++ b/ld/Makefile.am | ||
@@ -57,7 +57,7 @@ endif | ||
# We put the scripts in the directory $(scriptdir)/ldscripts. | ||
# We can't put the scripts in $(datadir) because the SEARCH_DIR | ||
# directives need to be different for native and cross linkers. | ||
-scriptdir = $(tooldir)/lib | ||
+scriptdir = $(libdir) | ||
|
||
EMUL = @EMUL@ | ||
EMULATION_OFILES = @EMULATION_OFILES@ | ||
--- a/ld/Makefile.in | ||
+++ b/ld/Makefile.in | ||
@@ -563,7 +563,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(ELF_CLFAGS) | ||
# We put the scripts in the directory $(scriptdir)/ldscripts. | ||
# We can't put the scripts in $(datadir) because the SEARCH_DIR | ||
# directives need to be different for native and cross linkers. | ||
-scriptdir = $(tooldir)/lib | ||
+scriptdir = $(libdir) | ||
BASEDIR = $(srcdir)/.. | ||
BFDDIR = $(BASEDIR)/bfd | ||
INCDIR = $(BASEDIR)/include |
20 changes: 20 additions & 0 deletions
20
toolchain/binutils/patches/2.31.1/300-012_check_ldrunpath_length.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- a/ld/emultempl/elf32.em | ||
+++ b/ld/emultempl/elf32.em | ||
@@ -1471,6 +1471,8 @@ fragment <<EOF | ||
&& command_line.rpath == NULL) | ||
{ | ||
path = (const char *) getenv ("LD_RUN_PATH"); | ||
+ if ((path) && (strlen (path) == 0)) | ||
+ path = NULL; | ||
if (path | ||
&& gld${EMULATION_NAME}_search_needed (path, &n, force)) | ||
break; | ||
@@ -1751,6 +1753,8 @@ gld${EMULATION_NAME}_before_allocation ( | ||
rpath = command_line.rpath; | ||
if (rpath == NULL) | ||
rpath = (const char *) getenv ("LD_RUN_PATH"); | ||
+ if ((rpath) && (strlen (rpath) == 0)) | ||
+ rpath = NULL; | ||
|
||
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next) | ||
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) |
18 changes: 18 additions & 0 deletions
18
toolchain/binutils/patches/2.31.1/400-mips_no_dynamic_linking_sym.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
--- a/bfd/elfxx-mips.c | ||
+++ b/bfd/elfxx-mips.c | ||
@@ -7888,6 +7888,7 @@ _bfd_mips_elf_create_dynamic_sections (b | ||
|
||
name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING"; | ||
bh = NULL; | ||
+ if (0) { | ||
if (!(_bfd_generic_link_add_one_symbol | ||
(info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0, | ||
NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) | ||
@@ -7900,6 +7901,7 @@ _bfd_mips_elf_create_dynamic_sections (b | ||
|
||
if (! bfd_elf_link_record_dynamic_symbol (info, h)) | ||
return FALSE; | ||
+ } | ||
|
||
if (! mips_elf_hash_table (info)->use_rld_obj_head) | ||
{ |
37 changes: 37 additions & 0 deletions
37
toolchain/binutils/patches/2.31.1/500-Change-default-emulation-for-mips64-linux.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
--- a/bfd/config.bfd | ||
+++ b/bfd/config.bfd | ||
@@ -913,12 +913,12 @@ case "${targ}" in | ||
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec" | ||
;; | ||
mips64*el-*-linux*) | ||
- targ_defvec=mips_elf32_ntrad_le_vec | ||
- targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec" | ||
+ targ_defvec=mips_elf64_trad_le_vec | ||
+ targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_be_vec" | ||
;; | ||
mips64*-*-linux*) | ||
- targ_defvec=mips_elf32_ntrad_be_vec | ||
- targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec" | ||
+ targ_defvec=mips_elf64_trad_be_vec | ||
+ targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec" | ||
;; | ||
mips*el-*-linux*) | ||
targ_defvec=mips_elf32_trad_le_vec | ||
--- a/ld/configure.tgt | ||
+++ b/ld/configure.tgt | ||
@@ -464,11 +464,11 @@ mips*el-*-vxworks*) targ_emul=elf32elmip | ||
mips*-*-vxworks*) targ_emul=elf32ebmipvxworks | ||
targ_extra_emuls="elf32elmipvxworks" ;; | ||
mips*-*-windiss) targ_emul=elf32mipswindiss ;; | ||
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32 | ||
- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip" | ||
+mips64*el-*-linux-*) targ_emul=elf64ltsmip | ||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip" | ||
targ_extra_libpath=$targ_extra_emuls ;; | ||
-mips64*-*-linux-*) targ_emul=elf32btsmipn32 | ||
- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip" | ||
+mips64*-*-linux-*) targ_emul=elf64btsmip | ||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip" | ||
targ_extra_libpath=$targ_extra_emuls ;; | ||
mips*el-*-linux-*) targ_emul=elf32ltsmip | ||
targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" |