summaryrefslogtreecommitdiff
path: root/package/binutils/binutils-2.20
diff options
context:
space:
mode:
authorGustavo Zacarias <gustavo@zacarias.com.ar>2010-12-31 08:39:01 -0300
committerPeter Korsgaard <jacmet@sunsite.dk>2011-01-02 22:55:16 +0100
commit009407e6be898abedb308247a82e4dee525e6570 (patch)
tree7ca84272c3040e080bda4ca13a850a552e5bee3c /package/binutils/binutils-2.20
parentb25cf0a05c1146b8f09da0c73032f3e08f768d86 (diff)
binutils: make it a proper package
* Convert binutils to a proper autotargets package * Add version 2.21 and drop version 2.17 * Hook up packaged binutils for target gcc * Build tools are on HOST_DIR now so change it * Move cross/host gcc to HOST_DIR * Drop kludge from commit 3c77bab2eeace3ee675bd745ca335fa3dd1630bb This is fixed in the next commit "gcc: install copies of libgcc, libstdc++ and libgcj to the sysroot" - tested for arm & x86_64 targets. * TARGET_CROSS now pointed to HOST_DIR too [Peter: Config.in tweaks] Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/binutils/binutils-2.20')
-rw-r--r--package/binutils/binutils-2.20/110-arm-eabi-conf.patch24
-rw-r--r--package/binutils/binutils-2.20/120-sh-conf.patch42
-rw-r--r--package/binutils/binutils-2.20/300-001_ld_makefile_patch.patch24
-rw-r--r--package/binutils/binutils-2.20/300-012_check_ldrunpath_length.patch21
-rw-r--r--package/binutils/binutils-2.20/400-arm_link_speed.patch183
5 files changed, 294 insertions, 0 deletions
diff --git a/package/binutils/binutils-2.20/110-arm-eabi-conf.patch b/package/binutils/binutils-2.20/110-arm-eabi-conf.patch
new file mode 100644
index 000000000..af26329d9
--- /dev/null
+++ b/package/binutils/binutils-2.20/110-arm-eabi-conf.patch
@@ -0,0 +1,24 @@
+diff -rdup binutils-2.18.50.0.3.orig/configure binutils-2.18.50.0.3/configure
+--- binutils-2.18.50.0.3.orig/configure 2007-11-22 12:41:26.000000000 +0100
++++ binutils-2.18.50.0.3/configure 2007-11-22 12:45:01.000000000 +0100
+@@ -2245,7 +2245,7 @@ case "${target}" in
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-*gnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
+diff -rdup binutils-2.18.50.0.3.orig/configure.ac binutils-2.18.50.0.3/configure.ac
+--- binutils-2.18.50.0.3.orig/configure.ac 2007-11-22 12:41:26.000000000 +0100
++++ binutils-2.18.50.0.3/configure.ac 2007-11-22 12:44:54.000000000 +0100
+@@ -522,7 +522,7 @@ case "${target}" in
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ libgloss_dir=arm
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-*gnueabi)
+ noconfigdirs="$noconfigdirs target-qthreads"
+ noconfigdirs="$noconfigdirs target-libobjc"
+ case ${with_newlib} in
diff --git a/package/binutils/binutils-2.20/120-sh-conf.patch b/package/binutils/binutils-2.20/120-sh-conf.patch
new file mode 100644
index 000000000..071d15a41
--- /dev/null
+++ b/package/binutils/binutils-2.20/120-sh-conf.patch
@@ -0,0 +1,42 @@
+diff -rdup binutils-2.18.50.0.9.old/configure binutils-2.18.50.0.9/configure
+--- binutils-2.18.50.0.9.old/configure 2008-08-23 17:36:13.000000000 +0200
++++ binutils-2.18.50.0.9/configure 2008-10-14 14:25:22.000000000 +0200
+@@ -2281,7 +2281,7 @@ case "${target}" in
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -2606,7 +2606,7 @@ case "${target}" in
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[3456789]86-*-vsta) ;; # don't add gprof back in
+ i[3456789]86-*-go32*) ;; # don't add gprof back in
+diff -rdup binutils-2.18.50.0.9.old/configure.ac binutils-2.18.50.0.9/configure.ac
+--- binutils-2.18.50.0.9.old/configure.ac 2008-08-23 17:36:13.000000000 +0200
++++ binutils-2.18.50.0.9/configure.ac 2008-10-14 14:25:11.000000000 +0200
+@@ -530,7 +530,7 @@ case "${target}" in
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -855,7 +855,7 @@ case "${target}" in
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[[3456789]]86-*-vsta) ;; # don't add gprof back in
+ i[[3456789]]86-*-go32*) ;; # don't add gprof back in
diff --git a/package/binutils/binutils-2.20/300-001_ld_makefile_patch.patch b/package/binutils/binutils-2.20/300-001_ld_makefile_patch.patch
new file mode 100644
index 000000000..5cb0f614d
--- /dev/null
+++ b/package/binutils/binutils-2.20/300-001_ld_makefile_patch.patch
@@ -0,0 +1,24 @@
+diff -u binutils-2.17.50.0.17.oorig/ld/Makefile.am binutils-2.17.50.0.17/ld/Makefile.am
+--- binutils-2.17.50.0.17.oorig/ld/Makefile.am 2007-06-18 19:29:29.000000000 +0200
++++ binutils-2.17.50.0.17/ld/Makefile.am 2007-06-25 10:00:36.000000000 +0200
+@@ -18,7 +18,7 @@
+ # 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@
+diff -u binutils-2.17.50.0.17.oorig/ld/Makefile.in binutils-2.17.50.0.17/ld/Makefile.in
+--- binutils-2.17.50.0.17.oorig/ld/Makefile.in 2007-06-18 19:29:29.000000000 +0200
++++ binutils-2.17.50.0.17/ld/Makefile.in 2007-06-25 10:00:36.000000000 +0200
+@@ -287,7 +287,7 @@
+ # 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
diff --git a/package/binutils/binutils-2.20/300-012_check_ldrunpath_length.patch b/package/binutils/binutils-2.20/300-012_check_ldrunpath_length.patch
new file mode 100644
index 000000000..6e809213d
--- /dev/null
+++ b/package/binutils/binutils-2.20/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,21 @@
+diff -u binutils-2.17.50.0.17.oorig/ld/emultempl/elf32.em binutils-2.17.50.0.17/ld/emultempl/elf32.em
+--- binutils-2.17.50.0.17.oorig/ld/emultempl/elf32.em 2007-06-18 19:31:40.000000000 +0200
++++ binutils-2.17.50.0.17/ld/emultempl/elf32.em 2007-06-25 10:01:25.000000000 +0200
+@@ -1007,6 +1007,8 @@
+ && command_line.rpath == NULL)
+ {
+ lib_path = (const char *) getenv ("LD_RUN_PATH");
++ if ((lib_path) && (strlen (lib_path) == 0))
++ lib_path = NULL;
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ force))
+ break;
+@@ -1191,6 +1193,8 @@
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
++ if ((rpath) && (strlen (rpath) == 0))
++ rpath = NULL;
+ if (! (bfd_elf_size_dynamic_sections
+ (output_bfd, command_line.soname, rpath,
+ command_line.filter_shlib,
diff --git a/package/binutils/binutils-2.20/400-arm_link_speed.patch b/package/binutils/binutils-2.20/400-arm_link_speed.patch
new file mode 100644
index 000000000..d03385a13
--- /dev/null
+++ b/package/binutils/binutils-2.20/400-arm_link_speed.patch
@@ -0,0 +1,183 @@
+From Binutils CVS:
+
+http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf32-arm.c?rev=1.230&content-type=text/x-cvsweb-markup&cvsroot=src
+
+Improves linking time from large projects on ARM.
+diff -dupr binutils-2.20.orig/bfd/elf32-arm.c binutils-2.20/bfd/elf32-arm.c
+--- binutils-2.20.orig/bfd/elf32-arm.c 2010-04-19 10:08:50.000000000 -0700
++++ binutils-2.20/bfd/elf32-arm.c 2010-04-19 10:12:45.000000000 -0700
+@@ -12736,108 +12736,15 @@ elf32_arm_section_from_shdr (bfd *abfd,
+ return TRUE;
+ }
+
+-/* A structure used to record a list of sections, independently
+- of the next and prev fields in the asection structure. */
+-typedef struct section_list
+-{
+- asection * sec;
+- struct section_list * next;
+- struct section_list * prev;
+-}
+-section_list;
+-
+-/* Unfortunately we need to keep a list of sections for which
+- an _arm_elf_section_data structure has been allocated. This
+- is because it is possible for functions like elf32_arm_write_section
+- to be called on a section which has had an elf_data_structure
+- allocated for it (and so the used_by_bfd field is valid) but
+- for which the ARM extended version of this structure - the
+- _arm_elf_section_data structure - has not been allocated. */
+-static section_list * sections_with_arm_elf_section_data = NULL;
+-
+-static void
+-record_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = bfd_malloc (sizeof (* entry));
+- if (entry == NULL)
+- return;
+- entry->sec = sec;
+- entry->next = sections_with_arm_elf_section_data;
+- entry->prev = NULL;
+- if (entry->next != NULL)
+- entry->next->prev = entry;
+- sections_with_arm_elf_section_data = entry;
+-}
+-
+-static struct section_list *
+-find_arm_elf_section_entry (asection * sec)
+-{
+- struct section_list * entry;
+- static struct section_list * last_entry = NULL;
+-
+- /* This is a short cut for the typical case where the sections are added
+- to the sections_with_arm_elf_section_data list in forward order and
+- then looked up here in backwards order. This makes a real difference
+- to the ld-srec/sec64k.exp linker test. */
+- entry = sections_with_arm_elf_section_data;
+- if (last_entry != NULL)
+- {
+- if (last_entry->sec == sec)
+- entry = last_entry;
+- else if (last_entry->next != NULL
+- && last_entry->next->sec == sec)
+- entry = last_entry->next;
+- }
+-
+- for (; entry; entry = entry->next)
+- if (entry->sec == sec)
+- break;
+-
+- if (entry)
+- /* Record the entry prior to this one - it is the entry we are most
+- likely to want to locate next time. Also this way if we have been
+- called from unrecord_section_with_arm_elf_section_data() we will not
+- be caching a pointer that is about to be freed. */
+- last_entry = entry->prev;
+-
+- return entry;
+-}
+-
+ static _arm_elf_section_data *
+ get_arm_elf_section_data (asection * sec)
+ {
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- return elf32_arm_section_data (entry->sec);
++ if (sec && sec->owner && is_arm_elf (sec->owner))
++ return elf32_arm_section_data (sec);
+ else
+ return NULL;
+ }
+
+-static void
+-unrecord_section_with_arm_elf_section_data (asection * sec)
+-{
+- struct section_list * entry;
+-
+- entry = find_arm_elf_section_entry (sec);
+-
+- if (entry)
+- {
+- if (entry->prev != NULL)
+- entry->prev->next = entry->next;
+- if (entry->next != NULL)
+- entry->next->prev = entry->prev;
+- if (entry == sections_with_arm_elf_section_data)
+- sections_with_arm_elf_section_data = entry->next;
+- free (entry);
+- }
+-}
+-
+-
+ typedef struct
+ {
+ void *finfo;
+@@ -13230,8 +13137,6 @@ elf32_arm_new_section_hook (bfd *abfd, a
+ sec->used_by_bfd = sdata;
+ }
+
+- record_section_with_arm_elf_section_data (sec);
+-
+ return _bfd_elf_new_section_hook (abfd, sec);
+ }
+
+@@ -13659,44 +13564,13 @@ elf32_arm_write_section (bfd *output_bfd
+ }
+
+ free (map);
+- arm_data->mapcount = 0;
++ arm_data->mapcount = -1;
+ arm_data->mapsize = 0;
+ arm_data->map = NULL;
+- unrecord_section_with_arm_elf_section_data (sec);
+
+ return FALSE;
+ }
+
+-static void
+-unrecord_section_via_map_over_sections (bfd * abfd ATTRIBUTE_UNUSED,
+- asection * sec,
+- void * ignore ATTRIBUTE_UNUSED)
+-{
+- unrecord_section_with_arm_elf_section_data (sec);
+-}
+-
+-static bfd_boolean
+-elf32_arm_close_and_cleanup (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_elf_close_and_cleanup (abfd);
+-}
+-
+-static bfd_boolean
+-elf32_arm_bfd_free_cached_info (bfd * abfd)
+-{
+- if (abfd->sections)
+- bfd_map_over_sections (abfd,
+- unrecord_section_via_map_over_sections,
+- NULL);
+-
+- return _bfd_free_cached_info (abfd);
+-}
+-
+ /* Display STT_ARM_TFUNC symbols as functions. */
+
+ static void
+@@ -13882,8 +13756,6 @@ const struct elf_size_info elf32_arm_siz
+ #define bfd_elf32_find_inliner_info elf32_arm_find_inliner_info
+ #define bfd_elf32_new_section_hook elf32_arm_new_section_hook
+ #define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
+-#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
+-#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
+ #define bfd_elf32_bfd_final_link elf32_arm_final_link
+
+ #define elf_backend_get_symbol_type elf32_arm_get_symbol_type