From b1e693e40281dc8c451e8892dfcdf55d78a4ade3 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Sun, 23 Sep 2007 17:08:09 +0000 Subject: Renamed all patches file names so that locales are now irrelevant to sort the files. Removed the locale check as it is now irrelevant. Removed the experimental binutils 2.17.50.0.xx: 2.18 is here now. --- patches/binutils/2.14/100-binutils-sh-relocs.patch | 38 ++ patches/binutils/2.14/binutils-sh-relocs.patch | 38 -- patches/binutils/2.15/700-bfd-hash-tweak.patch | 24 + .../2.15/710-binutils-2.15-allow-gcc-4.0.patch | 75 +++ .../binutils/2.15/720-binutils-2.15-psignal.patch | 40 ++ .../2.15/730-binutils-2.15-solaris-qsort.patch | 22 + patches/binutils/2.15/740-binutils-2.15-vmx.patch | 45 ++ .../binutils/2.15/750-binutils-arm-undef-imm.patch | 51 ++ .../binutils/2.15/760-binutils-skip-comments.patch | 101 +++ patches/binutils/2.15/770-cross-gprof.patch | 22 + patches/binutils/2.15/780-gccpr15247-fix.patch | 192 ++++++ patches/binutils/2.15/790-ld-2.15-callahan.patch | 677 ++++++++++++++++++++ .../binutils/2.15/800-ld-2.15-stabs-tweak.patch | 33 + .../2.15/810-s390-invalid-insn-format.patch | 42 ++ patches/binutils/2.15/bfd-hash-tweak.patch | 24 - .../2.15/binutils-2.15-allow-gcc-4.0.patch | 75 --- patches/binutils/2.15/binutils-2.15-psignal.patch | 40 -- .../2.15/binutils-2.15-solaris-qsort.patch | 22 - patches/binutils/2.15/binutils-2.15-vmx.patch | 45 -- patches/binutils/2.15/binutils-arm-undef-imm.patch | 51 -- patches/binutils/2.15/binutils-skip-comments.patch | 101 --- patches/binutils/2.15/cross-gprof.patch | 22 - patches/binutils/2.15/gccpr15247-fix.patch | 192 ------ patches/binutils/2.15/ld-2.15-callahan.patch | 677 -------------------- patches/binutils/2.15/ld-2.15-stabs-tweak.patch | 33 - .../binutils/2.15/s390-invalid-insn-format.patch | 42 -- patches/binutils/2.16.1/100-bfd-hash-tweak.patch | 23 + .../2.16.1/110-binutils-2.15-psignal.patch | 40 ++ .../2.16.1/120-binutils-skip-comments.patch | 95 +++ patches/binutils/2.16.1/130-callahan.patch | 693 +++++++++++++++++++++ patches/binutils/2.16.1/140-cross-gprof.patch | 22 + patches/binutils/2.16.1/150-stabs-tweak.patch | 28 + patches/binutils/2.16.1/bfd-hash-tweak.patch | 23 - .../binutils/2.16.1/binutils-2.15-psignal.patch | 40 -- .../binutils/2.16.1/binutils-skip-comments.patch | 95 --- patches/binutils/2.16.1/callahan.patch | 693 --------------------- patches/binutils/2.16.1/cross-gprof.patch | 22 - patches/binutils/2.16.1/stabs-tweak.patch | 28 - .../binutils/2.17.50.0.10/100-uclibc-conf.patch | 139 ----- .../binutils/2.17.50.0.10/110-arm-eabi-conf.patch | 24 - .../2.17.50.0.10/300-001_ld_makefile_patch.patch | 50 -- .../300-012_check_ldrunpath_length.patch | 47 -- .../binutils/2.17.50.0.14/100-uclibc-conf.patch | 149 ----- .../binutils/2.17.50.0.14/110-arm-eabi-conf.patch | 24 - .../2.17.50.0.14/300-001_ld_makefile_patch.patch | 24 - .../300-012_check_ldrunpath_length.patch | 21 - .../binutils/2.17.50.0.17/110-arm-eabi-conf.patch | 24 - .../2.17.50.0.17/300-001_ld_makefile_patch.patch | 24 - .../300-012_check_ldrunpath_length.patch | 21 - .../binutils/2.17.50.0.18/110-arm-eabi-conf.patch | 24 - .../2.17.50.0.18/300-001_ld_makefile_patch.patch | 24 - .../300-012_check_ldrunpath_length.patch | 21 - 52 files changed, 2263 insertions(+), 2879 deletions(-) create mode 100644 patches/binutils/2.14/100-binutils-sh-relocs.patch delete mode 100644 patches/binutils/2.14/binutils-sh-relocs.patch create mode 100644 patches/binutils/2.15/700-bfd-hash-tweak.patch create mode 100644 patches/binutils/2.15/710-binutils-2.15-allow-gcc-4.0.patch create mode 100644 patches/binutils/2.15/720-binutils-2.15-psignal.patch create mode 100644 patches/binutils/2.15/730-binutils-2.15-solaris-qsort.patch create mode 100644 patches/binutils/2.15/740-binutils-2.15-vmx.patch create mode 100644 patches/binutils/2.15/750-binutils-arm-undef-imm.patch create mode 100644 patches/binutils/2.15/760-binutils-skip-comments.patch create mode 100644 patches/binutils/2.15/770-cross-gprof.patch create mode 100644 patches/binutils/2.15/780-gccpr15247-fix.patch create mode 100644 patches/binutils/2.15/790-ld-2.15-callahan.patch create mode 100644 patches/binutils/2.15/800-ld-2.15-stabs-tweak.patch create mode 100644 patches/binutils/2.15/810-s390-invalid-insn-format.patch delete mode 100644 patches/binutils/2.15/bfd-hash-tweak.patch delete mode 100644 patches/binutils/2.15/binutils-2.15-allow-gcc-4.0.patch delete mode 100644 patches/binutils/2.15/binutils-2.15-psignal.patch delete mode 100644 patches/binutils/2.15/binutils-2.15-solaris-qsort.patch delete mode 100644 patches/binutils/2.15/binutils-2.15-vmx.patch delete mode 100644 patches/binutils/2.15/binutils-arm-undef-imm.patch delete mode 100644 patches/binutils/2.15/binutils-skip-comments.patch delete mode 100644 patches/binutils/2.15/cross-gprof.patch delete mode 100644 patches/binutils/2.15/gccpr15247-fix.patch delete mode 100644 patches/binutils/2.15/ld-2.15-callahan.patch delete mode 100644 patches/binutils/2.15/ld-2.15-stabs-tweak.patch delete mode 100644 patches/binutils/2.15/s390-invalid-insn-format.patch create mode 100644 patches/binutils/2.16.1/100-bfd-hash-tweak.patch create mode 100644 patches/binutils/2.16.1/110-binutils-2.15-psignal.patch create mode 100644 patches/binutils/2.16.1/120-binutils-skip-comments.patch create mode 100644 patches/binutils/2.16.1/130-callahan.patch create mode 100644 patches/binutils/2.16.1/140-cross-gprof.patch create mode 100644 patches/binutils/2.16.1/150-stabs-tweak.patch delete mode 100644 patches/binutils/2.16.1/bfd-hash-tweak.patch delete mode 100644 patches/binutils/2.16.1/binutils-2.15-psignal.patch delete mode 100644 patches/binutils/2.16.1/binutils-skip-comments.patch delete mode 100644 patches/binutils/2.16.1/callahan.patch delete mode 100644 patches/binutils/2.16.1/cross-gprof.patch delete mode 100644 patches/binutils/2.16.1/stabs-tweak.patch delete mode 100644 patches/binutils/2.17.50.0.10/100-uclibc-conf.patch delete mode 100644 patches/binutils/2.17.50.0.10/110-arm-eabi-conf.patch delete mode 100644 patches/binutils/2.17.50.0.10/300-001_ld_makefile_patch.patch delete mode 100644 patches/binutils/2.17.50.0.10/300-012_check_ldrunpath_length.patch delete mode 100644 patches/binutils/2.17.50.0.14/100-uclibc-conf.patch delete mode 100644 patches/binutils/2.17.50.0.14/110-arm-eabi-conf.patch delete mode 100644 patches/binutils/2.17.50.0.14/300-001_ld_makefile_patch.patch delete mode 100644 patches/binutils/2.17.50.0.14/300-012_check_ldrunpath_length.patch delete mode 100644 patches/binutils/2.17.50.0.17/110-arm-eabi-conf.patch delete mode 100644 patches/binutils/2.17.50.0.17/300-001_ld_makefile_patch.patch delete mode 100644 patches/binutils/2.17.50.0.17/300-012_check_ldrunpath_length.patch delete mode 100644 patches/binutils/2.17.50.0.18/110-arm-eabi-conf.patch delete mode 100644 patches/binutils/2.17.50.0.18/300-001_ld_makefile_patch.patch delete mode 100644 patches/binutils/2.17.50.0.18/300-012_check_ldrunpath_length.patch (limited to 'patches/binutils') diff --git a/patches/binutils/2.14/100-binutils-sh-relocs.patch b/patches/binutils/2.14/100-binutils-sh-relocs.patch new file mode 100644 index 00000000..ca0f2ac2 --- /dev/null +++ b/patches/binutils/2.14/100-binutils-sh-relocs.patch @@ -0,0 +1,38 @@ +Message-Id: <200307311239.h6VCdNe27056@r-rr.iij4u.or.jp> +To: dank@kegel.com +Cc: kkojima@rr.iij4u.or.jp +Subject: Re: Writing PIC version of __udivsi3_i4? (was: Re: "make tests" fails + with "libc.so: text relocations used" in glibc-2.3.2 for sh4) +In-Reply-To: Your message of "Wed, 30 Jul 2003 21:55:54 -0700" + <3F28A15A.5010400@kegel.com> +References: <3F28A15A.5010400@kegel.com> +Date: Thu, 31 Jul 2003 21:47:38 +0900 +From: kaz Kojima + +Dan Kegel wrote: +>> I'll give binutils-2.14.90.0.5 a shot, then. +> +> No joy - same problem. Guess I'll take this up on binutils and/or libc-alpha. + +Please try the patch below, though it's a diff against the current +binutils CVS. + +Regards, + kaz +-- +diff -u3p ORIG/src/bfd/elf32-sh.c LOCAL/src/bfd/elf32-sh.c +--- src/bfd/elf32-sh.c.old Fri Jul 25 14:46:58 2003 ++++ src/bfd/elf32-sh.c Thu Jul 31 21:09:38 2003 +@@ -6497,8 +6497,10 @@ sh_elf_check_relocs (bfd *abfd, struct b + sreloc, 2)) + return FALSE; + } ++#if 0 + if (sec->flags & SEC_READONLY) + info->flags |= DF_TEXTREL; ++#endif + elf_section_data (sec)->sreloc = sreloc; + } + + + diff --git a/patches/binutils/2.14/binutils-sh-relocs.patch b/patches/binutils/2.14/binutils-sh-relocs.patch deleted file mode 100644 index ca0f2ac2..00000000 --- a/patches/binutils/2.14/binutils-sh-relocs.patch +++ /dev/null @@ -1,38 +0,0 @@ -Message-Id: <200307311239.h6VCdNe27056@r-rr.iij4u.or.jp> -To: dank@kegel.com -Cc: kkojima@rr.iij4u.or.jp -Subject: Re: Writing PIC version of __udivsi3_i4? (was: Re: "make tests" fails - with "libc.so: text relocations used" in glibc-2.3.2 for sh4) -In-Reply-To: Your message of "Wed, 30 Jul 2003 21:55:54 -0700" - <3F28A15A.5010400@kegel.com> -References: <3F28A15A.5010400@kegel.com> -Date: Thu, 31 Jul 2003 21:47:38 +0900 -From: kaz Kojima - -Dan Kegel wrote: ->> I'll give binutils-2.14.90.0.5 a shot, then. -> -> No joy - same problem. Guess I'll take this up on binutils and/or libc-alpha. - -Please try the patch below, though it's a diff against the current -binutils CVS. - -Regards, - kaz --- -diff -u3p ORIG/src/bfd/elf32-sh.c LOCAL/src/bfd/elf32-sh.c ---- src/bfd/elf32-sh.c.old Fri Jul 25 14:46:58 2003 -+++ src/bfd/elf32-sh.c Thu Jul 31 21:09:38 2003 -@@ -6497,8 +6497,10 @@ sh_elf_check_relocs (bfd *abfd, struct b - sreloc, 2)) - return FALSE; - } -+#if 0 - if (sec->flags & SEC_READONLY) - info->flags |= DF_TEXTREL; -+#endif - elf_section_data (sec)->sreloc = sreloc; - } - - - diff --git a/patches/binutils/2.15/700-bfd-hash-tweak.patch b/patches/binutils/2.15/700-bfd-hash-tweak.patch new file mode 100644 index 00000000..6b8fc412 --- /dev/null +++ b/patches/binutils/2.15/700-bfd-hash-tweak.patch @@ -0,0 +1,24 @@ +Signed-off-by: dank@kegel.com + +Raising the size of the hash table is a noticable win when linking +at least one large app. + +There was a patch, +http://sources.redhat.com/ml/binutils/2004-06/msg00165.html +to do this dynamically. No idea why that didn't make it in. +So this tiny change to raise the default size is just +a stopgap for now. + + +--- binutils-2.15/bfd/hash.c.old 2003-12-01 01:33:01.000000000 -0500 ++++ binutils-2.15/bfd/hash.c 2006-03-01 16:26:26.701991000 -0500 +@@ -295,7 +295,7 @@ + */ + + /* The default number of entries to use when creating a hash table. */ +-#define DEFAULT_SIZE (4051) ++#define DEFAULT_SIZE (32749) + + /* Create a new hash table, given a number of entries. */ + + diff --git a/patches/binutils/2.15/710-binutils-2.15-allow-gcc-4.0.patch b/patches/binutils/2.15/710-binutils-2.15-allow-gcc-4.0.patch new file mode 100644 index 00000000..26e5a121 --- /dev/null +++ b/patches/binutils/2.15/710-binutils-2.15-allow-gcc-4.0.patch @@ -0,0 +1,75 @@ +Fix found here: http://www.freelists.org/archives/openbeos/11-2005/msg00090.html + +Fixes: +In file included from ./targ-cpu.h:1, + from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/obj-elf.h:42, + from ./obj-format.h:1, + from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/te-linux.h:4, + from ./targ-env.h:1, + from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/as.h:626, + from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/app.c:30: +/home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/tc-i386.h:451: error: array type has incomplete element type +make[3]: *** [app.o] Error 1 +make[3]: Leaving directory `/home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/build-binutils/gas' + +when building binutils-2.15 with gcc-4.0 + + +diff -ur binutils-2.15.old/gas/as.h binutils-2.15/gas/as.h +--- binutils-2.15.old/gas/as.h 2003-11-22 18:14:21.000000000 -0800 ++++ binutils-2.15/gas/as.h 2006-02-14 22:05:35.000000000 -0800 +@@ -605,7 +605,26 @@ + struct expressionS; + struct fix; + typedef struct symbol symbolS; +-struct relax_type; ++ ++/* JF moved this here from as.h under the theory that nobody except MACHINE.c ++ and write.c care about it anyway. */ ++/* [zooey]: the above no longer holds with gcc4, as it keeps bugging about ++ incomplete element types in arrays, if relax_type isn't defined ++ here. So I moved the definition back from tc.h to here. */ ++struct relax_type ++{ ++ /* Forward reach. Signed number. > 0. */ ++ long rlx_forward; ++ /* Backward reach. Signed number. < 0. */ ++ long rlx_backward; ++ ++ /* Bytes length of this address. */ ++ unsigned char rlx_length; ++ ++ /* Next longer relax-state. 0 means there is no 'next' relax-state. */ ++ relax_substateT rlx_more; ++}; ++ + typedef struct frag fragS; + + #ifdef BFD_ASSEMBLER +diff -ur binutils-2.15.old/gas/tc.h binutils-2.15/gas/tc.h +--- binutils-2.15.old/gas/tc.h 2003-12-03 15:39:38.000000000 -0800 ++++ binutils-2.15/gas/tc.h 2006-02-14 22:03:35.000000000 -0800 +@@ -24,23 +24,6 @@ + + extern const pseudo_typeS md_pseudo_table[]; + +-/* JF moved this here from as.h under the theory that nobody except MACHINE.c +- and write.c care about it anyway. */ +- +-struct relax_type +-{ +- /* Forward reach. Signed number. > 0. */ +- long rlx_forward; +- /* Backward reach. Signed number. < 0. */ +- long rlx_backward; +- +- /* Bytes length of this address. */ +- unsigned char rlx_length; +- +- /* Next longer relax-state. 0 means there is no 'next' relax-state. */ +- relax_substateT rlx_more; +-}; +- + typedef struct relax_type relax_typeS; + + extern const int md_reloc_size; /* Size of a relocation record */ diff --git a/patches/binutils/2.15/720-binutils-2.15-psignal.patch b/patches/binutils/2.15/720-binutils-2.15-psignal.patch new file mode 100644 index 00000000..98fa600e --- /dev/null +++ b/patches/binutils/2.15/720-binutils-2.15-psignal.patch @@ -0,0 +1,40 @@ +Make psignal prototype in libiberty match that in glibc. + +Fixes: + +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c: In function `psignal': +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `signo' doesn't match prototype +/usr/include/signal.h:131: prototype declaration +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `message' doesn't match prototype +/usr/include/signal.h:131: prototype declaration +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:568: warning: comparison between signed and unsigned +mprotect... make[1]: *** [strsignal.o] Error 1 +make[1]: Leaving directory `/export/hda3/dkegel/queue/jobdir.produser_cpsm17/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.1.3/build-binutils/libiberty' +make: *** [all-libiberty] Error 2 + +when building on red hat 7.1 +though it's a bit of a mystery why libiberty's psignal is being compiled at +all, since red hat 7.1's glibc supports psignal (hence the error message) + +--- binutils-2.15/libiberty/strsignal.c.old 2005-04-18 13:57:40.000000000 -0700 ++++ binutils-2.15/libiberty/strsignal.c 2005-04-18 13:59:09.000000000 -0700 +@@ -544,7 +544,7 @@ + + /* + +-@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) ++@deftypefn Supplemental void psignal (int @var{signo}, const char *@var{message}) + + Print @var{message} to the standard error, followed by a colon, + followed by the description of the signal specified by @var{signo}, +@@ -557,9 +557,7 @@ + #ifndef HAVE_PSIGNAL + + void +-psignal (signo, message) +- unsigned signo; +- char *message; ++psignal (int signo, const char *message) + { + if (signal_names == NULL) + { diff --git a/patches/binutils/2.15/730-binutils-2.15-solaris-qsort.patch b/patches/binutils/2.15/730-binutils-2.15-solaris-qsort.patch new file mode 100644 index 00000000..5fe36231 --- /dev/null +++ b/patches/binutils/2.15/730-binutils-2.15-solaris-qsort.patch @@ -0,0 +1,22 @@ +See http://sources.redhat.com/ml/binutils/2004-06/msg00114.html + +--- src/bfd/elflink.c.org 2004-07-05 09:11:42.920597000 -0400 ++++ src/bfd/elflink.c 2004-07-05 09:12:59.240847000 -0400 +@@ -2700,7 +2700,7 @@ + return vdiff > 0 ? 1 : -1; + else + { +- long sdiff = h1->root.u.def.section - h2->root.u.def.section; ++ long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id; + if (sdiff != 0) + return sdiff > 0 ? 1 : -1; + } +@@ -3954,7 +3954,7 @@ + i = idx + 1; + else + { +- long sdiff = slook - h->root.u.def.section; ++ long sdiff = slook->id - h->root.u.def.section->id; + if (sdiff < 0) + j = idx; + else if (sdiff > 0) diff --git a/patches/binutils/2.15/740-binutils-2.15-vmx.patch b/patches/binutils/2.15/740-binutils-2.15-vmx.patch new file mode 100644 index 00000000..5ae9efeb --- /dev/null +++ b/patches/binutils/2.15/740-binutils-2.15-vmx.patch @@ -0,0 +1,45 @@ +Grabbed with +wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/opcodes/ppc-opc.c.diff?r1=1.70&r2=1.71&cvsroot=src' +See +http://mail.gnu.org/archive/html/bug-binutils/2004-05/msg00071.html +and +http://sources.redhat.com/ml/binutils-cvs/2004-05/msg00111.html + +This fixes problems like +{standard input}: Assembler messages: +{standard input}:1: Error: Unrecognized opcode: `dssall' +which show up in binutils-2.15 when building the Linux kernel, +or possibly failed compilations when building setjmp/longjmp in glibc. + +An alternative fix would be to pass -many to the assembler. +A patch to do that for glibc is at +wget 'http://sources.redhat.com/cgi-bin/get-raw-msg?listname=libc-alpha&date=2004-05&msgid=40B36E8C.9030609%40us.ibm.com' +Yet another, better, fix would be for gcc to generate assembly +that told the assembler which processor type to use. +Presumably the Linux kernel sources would need a fix, too. +Probably better to just fix binutils to accept sources that it used to. + + +=================================================================== +RCS file: /cvs/src/src/opcodes/ppc-opc.c,v +retrieving revision 1.70 +retrieving revision 1.71 +diff -u -r1.70 -r1.71 +--- src/opcodes/ppc-opc.c 2004/05/05 13:43:36 1.70 ++++ src/opcodes/ppc-opc.c 2004/05/19 05:11:48 1.71 +@@ -1004,8 +1004,13 @@ + + /* If only one bit of the FXM field is set, we can use the new form + of the instruction, which is faster. Unlike the Power4 branch hint +- encoding, this is not backward compatible. */ +- else if ((dialect & PPC_OPCODE_POWER4) != 0 && (value & -value) == value) ++ encoding, this is not backward compatible. Do not generate the ++ new form unless -mpower4 has been given, or -many and the two ++ operand form of mfcr was used. */ ++ else if ((value & -value) == value ++ && ((dialect & PPC_OPCODE_POWER4) != 0 ++ || ((dialect & PPC_OPCODE_ANY) != 0 ++ && (insn & (0x3ff << 1)) == 19 << 1))) + insn |= 1 << 20; + + /* Any other value on mfcr is an error. */ diff --git a/patches/binutils/2.15/750-binutils-arm-undef-imm.patch b/patches/binutils/2.15/750-binutils-arm-undef-imm.patch new file mode 100644 index 00000000..6bf403ca --- /dev/null +++ b/patches/binutils/2.15/750-binutils-arm-undef-imm.patch @@ -0,0 +1,51 @@ +From http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gas/config/tc-arm.c.diff?r1=1.168&r2=1.169&cvsroot=src +See also http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-July/023128.html, +"[CRITICAL PATCH] 2.6: fix silent build error]" + +Revision 1.169, Fri Jul 2 11:12:29 2004 UTC (19 hours, 4 minutes ago) by nickc +Branch: MAIN +CVS Tags: binutils_latest_snapshot, HEAD +Changes since 1.168: +14 -1 lines + +(md_apply_fix3:BFD_RELOC_ARM_IMMEDIATE): Do not allow values which have come +from undefined symbols. +Always consider this fixup to have been processed as a reloc cannot be +generated for it. + + +=================================================================== +RCS file: /cvs/src/src/gas/config/tc-arm.c,v +retrieving revision 1.168 +retrieving revision 1.169 +diff -u -r1.168 -r1.169 +--- src/gas/config/tc-arm.c 2004/04/30 10:51:12 1.168 ++++ src/gas/config/tc-arm.c 2004/07/02 11:12:29 1.169 +@@ -12186,6 +12186,20 @@ + switch (fixP->fx_r_type) + { + case BFD_RELOC_ARM_IMMEDIATE: ++ /* We claim that this fixup has been processed here, ++ even if in fact we generate an error because we do ++ not have a reloc for it, so tc_gen_reloc will reject it. */ ++ fixP->fx_done = 1; ++ ++ if (fixP->fx_addsy ++ && ! S_IS_DEFINED (fixP->fx_addsy)) ++ { ++ as_bad_where (fixP->fx_file, fixP->fx_line, ++ _("undefined symbol %s used as an immediate value"), ++ S_GET_NAME (fixP->fx_addsy)); ++ break; ++ } ++ + newimm = validate_immediate (value); + temp = md_chars_to_number (buf, INSN_SIZE); + +@@ -12202,7 +12216,6 @@ + + newimm |= (temp & 0xfffff000); + md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); +- fixP->fx_done = 1; + break; + + case BFD_RELOC_ARM_ADRL_IMMEDIATE: diff --git a/patches/binutils/2.15/760-binutils-skip-comments.patch b/patches/binutils/2.15/760-binutils-skip-comments.patch new file mode 100644 index 00000000..804a17e0 --- /dev/null +++ b/patches/binutils/2.15/760-binutils-skip-comments.patch @@ -0,0 +1,101 @@ +Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html +Fixes +localealias.s:544: Error: junk at end of line, first unrecognized character is `,' +when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3 + +Paths adjusted to match crosstool's patcher. + +Message-Id: m3n052qw2g.fsf@whitebox.m5r.de +From: Andreas Schwab +To: Nathan Sidwell +Cc: Ian Lance Taylor , binutils at sources dot redhat dot com +Date: Fri, 23 Apr 2004 22:27:19 +0200 +Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line + +Nathan Sidwell writes: + +> Index: read.c +> =================================================================== +> RCS file: /cvs/src/src/gas/read.c,v +> retrieving revision 1.76 +> diff -c -3 -p -r1.76 read.c +> *** read.c 12 Mar 2004 17:48:12 -0000 1.76 +> --- read.c 18 Mar 2004 09:56:05 -0000 +> *************** read_a_source_file (char *name) +> *** 1053,1059 **** +> #endif +> input_line_pointer--; +> /* Report unknown char as ignored. */ +> ! ignore_rest_of_line (); +> } +> +> #ifdef md_after_pass_hook +> --- 1053,1059 ---- +> #endif +> input_line_pointer--; +> /* Report unknown char as ignored. */ +> ! demand_empty_rest_of_line (); +> } +> +> #ifdef md_after_pass_hook + +This means that the unknown character is no longer ignored, despite the +comment. As a side effect a line starting with a line comment character +not followed by APP in NO_APP mode now triggers an error instead of just a +warning, breaking builds of glibc on m68k-linux. Earlier in +read_a_source_file where #APP is handled there is another comment that +claims that unknown comments are ignored, when in fact they aren't (only +the initial line comment character is skipped). + +Note that the presence of #APP will mess up the line counters, but +that appears to be difficult to fix. + +Andreas. + +2004-04-23 Andreas Schwab + + * read.c (read_a_source_file): Ignore unknown text after line + comment character. Fix misleading comment. + +--- binutils/gas/read.c.~1.78.~ 2004-04-23 08:58:23.000000000 +0200 ++++ binutils/gas/read.c 2004-04-23 21:49:01.000000000 +0200 +@@ -1,6 +1,6 @@ + /* read.c - read a source file - + Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, +- 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. ++ 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + +@@ -950,10 +950,14 @@ read_a_source_file (char *name) + unsigned int new_length; + char *tmp_buf = 0; + +- bump_line_counters (); + s = input_line_pointer; + if (strncmp (s, "APP\n", 4)) +- continue; /* We ignore it */ ++ { ++ /* We ignore it */ ++ ignore_rest_of_line (); ++ continue; ++ } ++ bump_line_counters (); + s += 4; + + sb_new (&sbuf); +@@ -1052,7 +1056,7 @@ read_a_source_file (char *name) + continue; + #endif + input_line_pointer--; +- /* Report unknown char as ignored. */ ++ /* Report unknown char as error. */ + demand_empty_rest_of_line (); + } + + +-- +Andreas Schwab, SuSE Labs, schwab@suse.de +SuSE Linux AG, MaxfeldstraÃe 5, 90409 NÃrnberg, Germany +Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 +"And now for something completely different." diff --git a/patches/binutils/2.15/770-cross-gprof.patch b/patches/binutils/2.15/770-cross-gprof.patch new file mode 100644 index 00000000..ea6c18fd --- /dev/null +++ b/patches/binutils/2.15/770-cross-gprof.patch @@ -0,0 +1,22 @@ +--- binutils-2.15/configure.old 2004-07-21 21:36:47.000000000 -0700 ++++ binutils-2.15/configure 2004-07-21 21:37:08.000000000 -0700 +@@ -999,7 +999,7 @@ + + # Some tools are only suitable for building in a "native" situation. + # Remove these if host!=target. +-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" ++native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" + + # Similarly, some are only suitable for cross toolchains. + # Remove these if host=target. +--- binutils-2.15/configure.in.old 2004-07-21 21:37:19.000000000 -0700 ++++ binutils-2.15/configure.in 2004-07-21 21:37:34.000000000 -0700 +@@ -236,7 +236,7 @@ + + # Some tools are only suitable for building in a "native" situation. + # Remove these if host!=target. +-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" ++native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" + + # Similarly, some are only suitable for cross toolchains. + # Remove these if host=target. diff --git a/patches/binutils/2.15/780-gccpr15247-fix.patch b/patches/binutils/2.15/780-gccpr15247-fix.patch new file mode 100644 index 00000000..967bf7f9 --- /dev/null +++ b/patches/binutils/2.15/780-gccpr15247-fix.patch @@ -0,0 +1,192 @@ +See +http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15247 + +Fixes spurious error +/tmp/ccvNi4ou.s: Assembler messages: +/tmp/ccvNi4ou.s:2310: Error: Illegal operands: There are only 32 single precision f registers; [0-31] +make[2]: *** [/home/dank/wk/crosstool-0.28-rc10/build/sparc64-unknown-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/math/dosincos.o] Error 1 + +when compiling glibc's dosincos.c with gcc-3.4.0 + +=================================================================== +RCS file: /cvs/src/src/opcodes/sparc-opc.c,v +retrieving revision 1.9 +retrieving revision 1.10 +diff -u -r1.9 -r1.10 +--- src/opcodes/sparc-opc.c 2004/01/18 23:46:32 1.9 ++++ src/opcodes/sparc-opc.c 2004/04/20 10:23:51 1.10 +@@ -1273,110 +1273,72 @@ + #define FM_DF 2 /* v9 */ + #define FM_QF 3 /* v9 */ + +-#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \ +-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags, v9 } +- +-#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \ +-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 } ++#define fmoviccx(opcode, fpsize, args, cond, flags) /* v9 */ \ ++{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags, v9 } ++ ++#define fmovfccx(opcode, fpsize, args, fcond, flags) /* v9 */ \ ++{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, v9 } + + /* FIXME: use fmovicc/fmovfcc? */ /* v9 */ +-#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \ +-{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags | F_FLOAT, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags | F_FLOAT, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags | F_FLOAT, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags | F_FLOAT, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags | F_FLOAT, v9 }, \ +-{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags | F_FLOAT, v9 } +- +-/* v9 */ fmovcc ("fmovda", FM_DF, CONDA, FCONDA, 0), +-/* v9 */ fmovcc ("fmovqa", FM_QF, CONDA, FCONDA, 0), +-/* v9 */ fmovcc ("fmovsa", FM_SF, CONDA, FCONDA, 0), +-/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0), +-/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0), +-/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0), +-/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0), +-/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0), +-/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0), +-/* v9 */ fmovcc ("fmovde", FM_DF, CONDE, FCONDE, 0), +-/* v9 */ fmovcc ("fmovqe", FM_QF, CONDE, FCONDE, 0), +-/* v9 */ fmovcc ("fmovse", FM_SF, CONDE, FCONDE, 0), +-/* v9 */ fmovcc ("fmovdg", FM_DF, CONDG, FCONDG, 0), +-/* v9 */ fmovcc ("fmovqg", FM_QF, CONDG, FCONDG, 0), +-/* v9 */ fmovcc ("fmovsg", FM_SF, CONDG, FCONDG, 0), +-/* v9 */ fmovcc ("fmovdge", FM_DF, CONDGE, FCONDGE, 0), +-/* v9 */ fmovcc ("fmovqge", FM_QF, CONDGE, FCONDGE, 0), +-/* v9 */ fmovcc ("fmovsge", FM_SF, CONDGE, FCONDGE, 0), +-/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS), +-/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS), +-/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS), +-/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0), +-/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0), +-/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0), +-/* v9 */ fmovcc ("fmovdl", FM_DF, CONDL, FCONDL, 0), +-/* v9 */ fmovcc ("fmovql", FM_QF, CONDL, FCONDL, 0), +-/* v9 */ fmovcc ("fmovsl", FM_SF, CONDL, FCONDL, 0), +-/* v9 */ fmovcc ("fmovdle", FM_DF, CONDLE, FCONDLE, 0), +-/* v9 */ fmovcc ("fmovqle", FM_QF, CONDLE, FCONDLE, 0), +-/* v9 */ fmovcc ("fmovsle", FM_SF, CONDLE, FCONDLE, 0), +-/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0), +-/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0), +-/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0), +-/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0), +-/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0), +-/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0), +-/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS), +-/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS), +-/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS), +-/* v9 */ fmovcc ("fmovdn", FM_DF, CONDN, FCONDN, 0), +-/* v9 */ fmovcc ("fmovqn", FM_QF, CONDN, FCONDN, 0), +-/* v9 */ fmovcc ("fmovsn", FM_SF, CONDN, FCONDN, 0), +-/* v9 */ fmovcc ("fmovdne", FM_DF, CONDNE, FCONDNE, 0), +-/* v9 */ fmovcc ("fmovqne", FM_QF, CONDNE, FCONDNE, 0), +-/* v9 */ fmovcc ("fmovsne", FM_SF, CONDNE, FCONDNE, 0), +-/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0), +-/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0), +-/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0), +-/* v9 */ fmovcc ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS), +-/* v9 */ fmovcc ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS), +-/* v9 */ fmovcc ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS), +-/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0), +-/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0), +-/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0), +-/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0), +-/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0), +-/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0), +-/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0), +-/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0), +-/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0), +-/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0), +-/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0), +-/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0), +-/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0), +-/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0), +-/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0), +-/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0), +-/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0), +-/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0), +-/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0), +-/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0), +-/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0), +-/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0), +-/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0), +-/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0), +-/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0), +-/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0), +-/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0), +-/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0), +-/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0), +-/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0), +-/* v9 */ fmovcc ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS), +-/* v9 */ fmovcc ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS), +-/* v9 */ fmovcc ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS), +- ++#define fmovccx(opcode, fpsize, args, cond, fcond, flags) /* v9 */ \ ++{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags | F_FLOAT, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags | F_FLOAT, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, v9 }, \ ++{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, v9 } ++ ++#define fmovicc(suffix, cond, flags) /* v9 */ \ ++fmoviccx("fmovd" suffix, FM_DF, "B,H", cond, flags), \ ++fmoviccx("fmovq" suffix, FM_QF, "R,J", cond, flags), \ ++fmoviccx("fmovs" suffix, FM_SF, "f,g", cond, flags) ++ ++#define fmovfcc(suffix, fcond, flags) /* v9 */ \ ++fmovfccx("fmovd" suffix, FM_DF, "B,H", fcond, flags), \ ++fmovfccx("fmovq" suffix, FM_QF, "R,J", fcond, flags), \ ++fmovfccx("fmovs" suffix, FM_SF, "f,g", fcond, flags) ++ ++#define fmovcc(suffix, cond, fcond, flags) /* v9 */ \ ++fmovccx("fmovd" suffix, FM_DF, "B,H", cond, fcond, flags), \ ++fmovccx("fmovq" suffix, FM_QF, "R,J", cond, fcond, flags), \ ++fmovccx("fmovs" suffix, FM_SF, "f,g", cond, fcond, flags) ++ ++/* v9 */ fmovcc ("a", CONDA, FCONDA, 0), ++/* v9 */ fmovicc ("cc", CONDCC, 0), ++/* v9 */ fmovicc ("cs", CONDCS, 0), ++/* v9 */ fmovcc ("e", CONDE, FCONDE, 0), ++/* v9 */ fmovcc ("g", CONDG, FCONDG, 0), ++/* v9 */ fmovcc ("ge", CONDGE, FCONDGE, 0), ++/* v9 */ fmovicc ("geu", CONDGEU, F_ALIAS), ++/* v9 */ fmovicc ("gu", CONDGU, 0), ++/* v9 */ fmovcc ("l", CONDL, FCONDL, 0), ++/* v9 */ fmovcc ("le", CONDLE, FCONDLE, 0), ++/* v9 */ fmovicc ("leu", CONDLEU, 0), ++/* v9 */ fmovfcc ("lg", FCONDLG, 0), ++/* v9 */ fmovicc ("lu", CONDLU, F_ALIAS), ++/* v9 */ fmovcc ("n", CONDN, FCONDN, 0), ++/* v9 */ fmovcc ("ne", CONDNE, FCONDNE, 0), ++/* v9 */ fmovicc ("neg", CONDNEG, 0), ++/* v9 */ fmovcc ("nz", CONDNZ, FCONDNZ, F_ALIAS), ++/* v9 */ fmovfcc ("o", FCONDO, 0), ++/* v9 */ fmovicc ("pos", CONDPOS, 0), ++/* v9 */ fmovfcc ("u", FCONDU, 0), ++/* v9 */ fmovfcc ("ue", FCONDUE, 0), ++/* v9 */ fmovfcc ("ug", FCONDUG, 0), ++/* v9 */ fmovfcc ("uge", FCONDUGE, 0), ++/* v9 */ fmovfcc ("ul", FCONDUL, 0), ++/* v9 */ fmovfcc ("ule", FCONDULE, 0), ++/* v9 */ fmovicc ("vc", CONDVC, 0), ++/* v9 */ fmovicc ("vs", CONDVS, 0), ++/* v9 */ fmovcc ("z", CONDZ, FCONDZ, F_ALIAS), ++ ++#undef fmoviccx /* v9 */ ++#undef fmovfccx /* v9 */ ++#undef fmovccx /* v9 */ + #undef fmovicc /* v9 */ + #undef fmovfcc /* v9 */ + #undef fmovcc /* v9 */ diff --git a/patches/binutils/2.15/790-ld-2.15-callahan.patch b/patches/binutils/2.15/790-ld-2.15-callahan.patch new file mode 100644 index 00000000..bb4a69c8 --- /dev/null +++ b/patches/binutils/2.15/790-ld-2.15-callahan.patch @@ -0,0 +1,677 @@ +Signed-off-by: dank@kegel.com +Fixes ld speed issue. +See http://weblogs.mozillazine.org/roc/archives/2005/02/optimizing_gnu.html +See thread "Re: optimizations for 3x speedup in ld", +http://sources.redhat.com/ml/binutils/2005-03/msg00847.html + +Wildcard section matching enhancement, backported from the binutils CVS tree. +Here's the CVS log comment from the original change to ldlang.c: + +revision 1.177 +date: 2005/04/06 15:33:02; author: jakub; state: Exp; lines: +438 -51 +2005-04-06 Jakub Jelinek + + * ldlang.c: Formatting. + (walk_wild_consider_section): Remember return value from wildcardp. + (is_simple_wild): Use strcspn instead of 2 strpbrk calls and strlen. + (wild_spec_can_overlap): Use strcspn instead of strpbrk and strlen. + +2005-04-06 Robert O'Callahan + + * ld.h (lean_section_userdata_type): Remove. + (fat_section_userdata_type): Remove file field. + (SECTION_USERDATA_SIZE): Remove. + * ldlang.c (init_os): Eliminate initialization of unused + lean_section_userdata_type. + + * ldlang.h (callback_t, walk_wild_section_handler_t): New + typedefs. + (struct lang_wild_statement_struct): Add walk_wild_section_handler + and handler_data fields. + * ldlang.c (callback_t): Removed. + (walk_wild_consider_section, walk_wild_section_general, + section_iterator_callback, find_section, is_simple_wild, + match_simple_wild, walk_wild_section_specs1_wild0, + walk_wild_section_specs1_wild1, walk_wild_section_specs2_wild1, + walk_wild_section_specs3_wild2, walk_wild_section_specs4_wild2, + wild_spec_can_overlap, analyze_walk_wild_section_handler): New + functions. + (lang_add_wild): Call analyze_walk_wild_section_handler. + (walk_wild_section): Renamed to walk_wild_section_general and + created a wrapper function. + (section_iterator_callback_data): New typedef. + +Note that bfd_get_section_by_name_if didn't exist in 2.15, so it was backported +as well. + +--- binutils-2.15/bfd/bfd-in2.h.old 2004-05-17 15:35:56.000000000 -0400 ++++ binutils-2.15/bfd/bfd-in2.h 2006-02-09 11:54:45.989940000 -0500 +@@ -1425,6 +1425,10 @@ + + asection *bfd_get_section_by_name (bfd *abfd, const char *name); + ++asection *bfd_get_section_by_name_if (bfd *abfd, const char *name, ++ bfd_boolean (*operation) (bfd *, asection *, void *), ++ void *user_storage); ++ + char *bfd_get_unique_section_name + (bfd *abfd, const char *templat, int *count); + +--- binutils-2.15/bfd/section.c.old 2003-12-01 01:33:01.000000000 -0500 ++++ binutils-2.15/bfd/section.c 2006-01-23 14:16:54.768993000 -0500 +@@ -801,6 +801,57 @@ + + /* + FUNCTION ++ bfd_get_section_by_name_if ++ ++SYNOPSIS ++ asection *bfd_get_section_by_name_if ++ (bfd *abfd, ++ const char *name, ++ bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), ++ void *obj); ++ ++DESCRIPTION ++ Call the provided function @var{func} for each section ++ attached to the BFD @var{abfd} whose name matches @var{name}, ++ passing @var{obj} as an argument. The function will be called ++ as if by ++ ++| func (abfd, the_section, obj); ++ ++ It returns the first section for which @var{func} returns true, ++ otherwise <>. ++ ++*/ ++ ++asection * ++bfd_get_section_by_name_if (bfd *abfd, const char *name, ++ bfd_boolean (*operation) (bfd *, ++ asection *, ++ void *), ++ void *user_storage) ++{ ++ struct section_hash_entry *sh; ++ unsigned long hash; ++ ++ sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE); ++ if (sh == NULL) ++ return NULL; ++ ++ hash = sh->root.hash; ++ do ++ { ++ if ((*operation) (abfd, &sh->section, user_storage)) ++ return &sh->section; ++ sh = (struct section_hash_entry *) sh->root.next; ++ } ++ while (sh != NULL && sh->root.hash == hash ++ && strcmp (sh->root.string, name) == 0); ++ ++ return NULL; ++} ++ ++/* ++FUNCTION + bfd_get_unique_section_name + + SYNOPSIS +--- binutils-2.15/ld/ldlang.c.old 2004-05-17 15:36:16.000000000 -0400 ++++ binutils-2.15/ld/ldlang.c 2006-01-23 13:40:12.745499000 -0500 +@@ -81,9 +81,6 @@ + static void lang_record_phdrs (void); + static void lang_do_version_exports_section (void); + +-typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, +- asection *, lang_input_statement_type *, void *); +- + /* Exported variables. */ + lang_output_section_statement_type *abs_output_section; + lang_statement_list_type lang_output_section_statement; +@@ -138,21 +135,71 @@ + + /* Generic traversal routines for finding matching sections. */ + ++/* Try processing a section against a wildcard. This just calls ++ the callback unless the filename exclusion list is present ++ and excludes the file. It's hardly ever present so this ++ function is very fast. */ ++ ++static void ++walk_wild_consider_section (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ asection *s, ++ struct wildcard_list *sec, ++ callback_t callback, ++ void *data) ++{ ++ bfd_boolean skip = FALSE; ++ struct name_list *list_tmp; ++ ++ /* Don't process sections from files which were ++ excluded. */ ++ for (list_tmp = sec->spec.exclude_name_list; ++ list_tmp; ++ list_tmp = list_tmp->next) ++ { ++ bfd_boolean is_wildcard = wildcardp (list_tmp->name); ++ if (is_wildcard) ++ skip = fnmatch (list_tmp->name, file->filename, 0) == 0; ++ else ++ skip = strcmp (list_tmp->name, file->filename) == 0; ++ ++ /* If this file is part of an archive, and the archive is ++ excluded, exclude this file. */ ++ if (! skip && file->the_bfd != NULL ++ && file->the_bfd->my_archive != NULL ++ && file->the_bfd->my_archive->filename != NULL) ++ { ++ if (is_wildcard) ++ skip = fnmatch (list_tmp->name, ++ file->the_bfd->my_archive->filename, ++ 0) == 0; ++ else ++ skip = strcmp (list_tmp->name, ++ file->the_bfd->my_archive->filename) == 0; ++ } ++ ++ if (skip) ++ break; ++ } ++ ++ if (!skip) ++ (*callback) (ptr, sec, s, file, data); ++} ++ ++/* Lowest common denominator routine that can handle everything correctly, ++ but slowly. */ ++ + static void +-walk_wild_section (lang_wild_statement_type *ptr, +- lang_input_statement_type *file, +- callback_t callback, +- void *data) ++walk_wild_section_general (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) + { + asection *s; +- +- if (file->just_syms_flag) +- return; ++ struct wildcard_list *sec; + + for (s = file->the_bfd->sections; s != NULL; s = s->next) + { +- struct wildcard_list *sec; +- + sec = ptr->section_list; + if (sec == NULL) + (*callback) (ptr, sec, s, file, data); +@@ -160,39 +207,8 @@ + while (sec != NULL) + { + bfd_boolean skip = FALSE; +- struct name_list *list_tmp; +- +- /* Don't process sections from files which were +- excluded. */ +- for (list_tmp = sec->spec.exclude_name_list; +- list_tmp; +- list_tmp = list_tmp->next) +- { +- if (wildcardp (list_tmp->name)) +- skip = fnmatch (list_tmp->name, file->filename, 0) == 0; +- else +- skip = strcmp (list_tmp->name, file->filename) == 0; +- +- /* If this file is part of an archive, and the archive is +- excluded, exclude this file. */ +- if (! skip && file->the_bfd != NULL +- && file->the_bfd->my_archive != NULL +- && file->the_bfd->my_archive->filename != NULL) +- { +- if (wildcardp (list_tmp->name)) +- skip = fnmatch (list_tmp->name, +- file->the_bfd->my_archive->filename, +- 0) == 0; +- else +- skip = strcmp (list_tmp->name, +- file->the_bfd->my_archive->filename) == 0; +- } +- +- if (skip) +- break; +- } + +- if (!skip && sec->spec.name != NULL) ++ if (sec->spec.name != NULL) + { + const char *sname = bfd_get_section_name (file->the_bfd, s); + +@@ -203,13 +219,381 @@ + } + + if (!skip) +- (*callback) (ptr, sec, s, file, data); ++ walk_wild_consider_section (ptr, file, s, sec, callback, data); + + sec = sec->next; + } + } + } + ++/* Routines to find a single section given its name. If there's more ++ than one section with that name, we report that. */ ++ ++typedef struct ++{ ++ asection *found_section; ++ bfd_boolean multiple_sections_found; ++} section_iterator_callback_data; ++ ++static bfd_boolean ++section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data) ++{ ++ section_iterator_callback_data *d = data; ++ ++ if (d->found_section != NULL) ++ { ++ d->multiple_sections_found = TRUE; ++ return TRUE; ++ } ++ ++ d->found_section = s; ++ return FALSE; ++} ++ ++static asection * ++find_section (lang_input_statement_type *file, ++ struct wildcard_list *sec, ++ bfd_boolean *multiple_sections_found) ++{ ++ section_iterator_callback_data cb_data = { NULL, FALSE }; ++ ++ bfd_get_section_by_name_if (file->the_bfd, sec->spec.name, ++ section_iterator_callback, &cb_data); ++ *multiple_sections_found = cb_data.multiple_sections_found; ++ return cb_data.found_section; ++} ++ ++/* Code for handling simple wildcards without going through fnmatch, ++ which can be expensive because of charset translations etc. */ ++ ++/* A simple wild is a literal string followed by a single '*', ++ where the literal part is at least 4 characters long. */ ++ ++static bfd_boolean ++is_simple_wild (const char *name) ++{ ++ size_t len = strcspn (name, "*?["); ++ return len >= 4 && name[len] == '*' && name[len + 1] == '\0'; ++} ++ ++static bfd_boolean ++match_simple_wild (const char *pattern, const char *name) ++{ ++ /* The first four characters of the pattern are guaranteed valid ++ non-wildcard characters. So we can go faster. */ ++ if (pattern[0] != name[0] || pattern[1] != name[1] ++ || pattern[2] != name[2] || pattern[3] != name[3]) ++ return FALSE; ++ ++ pattern += 4; ++ name += 4; ++ while (*pattern != '*') ++ if (*name++ != *pattern++) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* Specialized, optimized routines for handling different kinds of ++ wildcards */ ++ ++static void ++walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ /* We can just do a hash lookup for the section with the right name. ++ But if that lookup discovers more than one section with the name ++ (should be rare), we fall back to the general algorithm because ++ we would otherwise have to sort the sections to make sure they ++ get processed in the bfd's order. */ ++ bfd_boolean multiple_sections_found; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ walk_wild_section_general (ptr, file, callback, data); ++ else if (s0) ++ walk_wild_consider_section (ptr, file, s0, sec0, callback, data); ++} ++ ++static void ++walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *wildsec0 = ptr->handler_data[0]; ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec0, callback, data); ++ } ++} ++ ++static void ++walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *wildsec1 = ptr->handler_data[1]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ /* Note that if the section was not found, s0 is NULL and ++ we'll simply never succeed the s == s0 test below. */ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ /* Recall that in this code path, a section cannot satisfy more ++ than one spec, so if s == s0 then it cannot match ++ wildspec1. */ ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec1, callback, ++ data); ++ } ++ } ++} ++ ++static void ++walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *wildsec1 = ptr->handler_data[1]; ++ struct wildcard_list *wildsec2 = ptr->handler_data[2]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec1, callback, data); ++ else ++ { ++ skip = !match_simple_wild (wildsec2->spec.name, sname); ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec2, callback, ++ data); ++ } ++ } ++ } ++} ++ ++static void ++walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *sec1 = ptr->handler_data[1]; ++ struct wildcard_list *wildsec2 = ptr->handler_data[2]; ++ struct wildcard_list *wildsec3 = ptr->handler_data[3]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1; ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ s1 = find_section (file, sec1, &multiple_sections_found); ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ if (s == s1) ++ walk_wild_consider_section (ptr, file, s, sec1, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec2->spec.name, ++ sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec2, callback, ++ data); ++ else ++ { ++ skip = !match_simple_wild (wildsec3->spec.name, sname); ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec3, ++ callback, data); ++ } ++ } ++ } ++} ++ ++static void ++walk_wild_section (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ if (file->just_syms_flag) ++ return; ++ ++ (*ptr->walk_wild_section_handler) (ptr, file, callback, data); ++} ++ ++/* Returns TRUE when name1 is a wildcard spec that might match ++ something name2 can match. We're conservative: we return FALSE ++ only if the prefixes of name1 and name2 are different up to the ++ first wildcard character. */ ++ ++static bfd_boolean ++wild_spec_can_overlap (const char *name1, const char *name2) ++{ ++ size_t prefix1_len = strcspn (name1, "?*["); ++ size_t prefix2_len = strcspn (name2, "?*["); ++ size_t min_prefix_len; ++ ++ /* Note that if there is no wildcard character, then we treat the ++ terminating 0 as part of the prefix. Thus ".text" won't match ++ ".text." or ".text.*", for example. */ ++ if (name1[prefix1_len] == '\0') ++ prefix1_len++; ++ if (name2[prefix2_len] == '\0') ++ prefix2_len++; ++ ++ min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len; ++ ++ return memcmp (name1, name2, min_prefix_len) == 0; ++} ++ ++/* Select specialized code to handle various kinds of wildcard ++ statements. */ ++ ++static void ++analyze_walk_wild_section_handler (lang_wild_statement_type *ptr) ++{ ++ int sec_count = 0; ++ int wild_name_count = 0; ++ struct wildcard_list *sec; ++ int signature; ++ int data_counter; ++ ++ ptr->walk_wild_section_handler = walk_wild_section_general; ++ ++ /* Count how many wildcard_specs there are, and how many of those ++ actually use wildcards in the name. Also, bail out if any of the ++ wildcard names are NULL. (Can this actually happen? ++ walk_wild_section used to test for it.) And bail out if any ++ of the wildcards are more complex than a simple string ++ ending in a single '*'. */ ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ { ++ ++sec_count; ++ if (sec->spec.name == NULL) ++ return; ++ if (wildcardp (sec->spec.name)) ++ { ++ ++wild_name_count; ++ if (!is_simple_wild (sec->spec.name)) ++ return; ++ } ++ } ++ ++ /* The zero-spec case would be easy to optimize but it doesn't ++ happen in practice. Likewise, more than 4 specs doesn't ++ happen in practice. */ ++ if (sec_count == 0 || sec_count > 4) ++ return; ++ ++ /* Check that no two specs can match the same section. */ ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ { ++ struct wildcard_list *sec2; ++ for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next) ++ { ++ if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name)) ++ return; ++ } ++ } ++ ++ signature = (sec_count << 8) + wild_name_count; ++ switch (signature) ++ { ++ case 0x0100: ++ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0; ++ break; ++ case 0x0101: ++ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1; ++ break; ++ case 0x0201: ++ ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1; ++ break; ++ case 0x0302: ++ ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2; ++ break; ++ case 0x0402: ++ ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2; ++ break; ++ default: ++ return; ++ } ++ ++ /* Now fill the data array with pointers to the specs, first the ++ specs with non-wildcard names, then the specs with wildcard ++ names. It's OK to process the specs in different order from the ++ given order, because we've already determined that no section ++ will match more than one spec. */ ++ data_counter = 0; ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ if (!wildcardp (sec->spec.name)) ++ ptr->handler_data[data_counter++] = sec; ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ if (wildcardp (sec->spec.name)) ++ ptr->handler_data[data_counter++] = sec; ++} ++ + /* Handle a wild statement for a single file F. */ + + static void +@@ -4353,6 +4737,7 @@ + new->section_list = section_list; + new->keep_sections = keep_sections; + lang_list_init (&new->children); ++ analyze_walk_wild_section_handler (new); + } + + void +--- binutils-2.15/ld/ldlang.h.old 2004-05-17 15:36:16.000000000 -0400 ++++ binutils-2.15/ld/ldlang.h 2006-01-23 13:32:33.653292000 -0500 +@@ -295,7 +295,17 @@ + union lang_statement_union *file; + } lang_afile_asection_pair_statement_type; + +-typedef struct lang_wild_statement_struct ++typedef struct lang_wild_statement_struct lang_wild_statement_type; ++ ++typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, ++ asection *, lang_input_statement_type *, void *); ++ ++typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *, ++ lang_input_statement_type *, ++ callback_t callback, ++ void *data); ++ ++struct lang_wild_statement_struct + { + lang_statement_header_type header; + const char *filename; +@@ -303,7 +313,10 @@ + struct wildcard_list *section_list; + bfd_boolean keep_sections; + lang_statement_list_type children; +-} lang_wild_statement_type; ++ ++ walk_wild_section_handler_t walk_wild_section_handler; ++ struct wildcard_list *handler_data[4]; ++}; + + typedef struct lang_address_statement_struct + { diff --git a/patches/binutils/2.15/800-ld-2.15-stabs-tweak.patch b/patches/binutils/2.15/800-ld-2.15-stabs-tweak.patch new file mode 100644 index 00000000..bd6ae7a1 --- /dev/null +++ b/patches/binutils/2.15/800-ld-2.15-stabs-tweak.patch @@ -0,0 +1,33 @@ +Signed-off-by: dank@kegel.com + +See http://sourceware.org/ml/binutils/2005-12/msg00270.html +http://sourceware.org/ml/binutils-cvs/2005-12/msg00139.html + +STABS hash table size change, backported from the binutils CVS tree. Here's +the CVS log comment for the original change: + +revision 1.25 +date: 2005/12/29 10:29:23; author: nickc; state: Exp; lines: +2 -3 +(_bfd_link_section_stabs): Use bfd_hash_table_init rather than +bfd_hash_table_init_n(...,251) so that the size of the hash table can be +controlled by the user. + +Note that tunable hash table size changes were added after 2.15. The effect +of this change is to make bfd use its default hash table size for the stabs +hash as well. + + +--- binutils-2.15/bfd/stabs.c.old 2004-05-17 15:36:04.000000000 -0400 ++++ binutils-2.15/bfd/stabs.c 2006-02-09 15:21:56.567014000 -0500 +@@ -241,9 +241,8 @@ + goto error_return; + /* Make sure the first byte is zero. */ + (void) _bfd_stringtab_add (sinfo->strings, "", TRUE, TRUE); +- if (! bfd_hash_table_init_n (&sinfo->includes.root, +- stab_link_includes_newfunc, +- 251)) ++ if (! bfd_hash_table_init (&sinfo->includes.root, ++ stab_link_includes_newfunc)) + goto error_return; + sinfo->stabstr = bfd_make_section_anyway (abfd, ".stabstr"); + sinfo->stabstr->flags |= SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING; diff --git a/patches/binutils/2.15/810-s390-invalid-insn-format.patch b/patches/binutils/2.15/810-s390-invalid-insn-format.patch new file mode 100644 index 00000000..32962015 --- /dev/null +++ b/patches/binutils/2.15/810-s390-invalid-insn-format.patch @@ -0,0 +1,42 @@ +Message-ID: <000801c48f60$cec16630$9103a8c0@ULOC5012> +From: "Michael Geiger" +To: +Subject: Patch for cross compiling s/390 kernel on linux host +Date: Tue, 31 Aug 2004 15:45:41 +0200 + +Dear Dan, + +I had big problems compiling a kernel for s/390 on my linux host - I tried +different chains from crosstool-0.28-rc34 and finally succeded with +gcc-3.3.4-glibc-2.3.2 after applying another patch to binutils-2.15 +(attached). +All compilations of the different kernel versions I tried stopped with +"Invalid .insn format" somewhere. I checked the recent cvs version of +binutils and applied the latest diff to gas/config/tc-s390.c and that solved +it. + +Greetings + +Michael Geiger + + +diff -u -r1.39 -r1.40 +--- src/gas/config/tc-s390.c 2004/05/06 11:01:48 1.39 ++++ src/gas/config/tc-s390.c 2004/06/15 12:38:08 1.40 +@@ -1596,13 +1596,13 @@ + if (exp.X_op == O_constant) + { + if ( ( opformat->oplen == 6 +- && exp.X_add_number >= 0 ++ && (addressT) exp.X_add_number >= 0 + && (addressT) exp.X_add_number < (1ULL << 48)) + || ( opformat->oplen == 4 +- && exp.X_add_number >= 0 ++ && (addressT) exp.X_add_number >= 0 + && (addressT) exp.X_add_number < (1ULL << 32)) + || ( opformat->oplen == 2 +- && exp.X_add_number >= 0 ++ && (addressT) exp.X_add_number >= 0 + && (addressT) exp.X_add_number < (1ULL << 16))) + md_number_to_chars (insn, exp.X_add_number, opformat->oplen); + else diff --git a/patches/binutils/2.15/bfd-hash-tweak.patch b/patches/binutils/2.15/bfd-hash-tweak.patch deleted file mode 100644 index 6b8fc412..00000000 --- a/patches/binutils/2.15/bfd-hash-tweak.patch +++ /dev/null @@ -1,24 +0,0 @@ -Signed-off-by: dank@kegel.com - -Raising the size of the hash table is a noticable win when linking -at least one large app. - -There was a patch, -http://sources.redhat.com/ml/binutils/2004-06/msg00165.html -to do this dynamically. No idea why that didn't make it in. -So this tiny change to raise the default size is just -a stopgap for now. - - ---- binutils-2.15/bfd/hash.c.old 2003-12-01 01:33:01.000000000 -0500 -+++ binutils-2.15/bfd/hash.c 2006-03-01 16:26:26.701991000 -0500 -@@ -295,7 +295,7 @@ - */ - - /* The default number of entries to use when creating a hash table. */ --#define DEFAULT_SIZE (4051) -+#define DEFAULT_SIZE (32749) - - /* Create a new hash table, given a number of entries. */ - - diff --git a/patches/binutils/2.15/binutils-2.15-allow-gcc-4.0.patch b/patches/binutils/2.15/binutils-2.15-allow-gcc-4.0.patch deleted file mode 100644 index 26e5a121..00000000 --- a/patches/binutils/2.15/binutils-2.15-allow-gcc-4.0.patch +++ /dev/null @@ -1,75 +0,0 @@ -Fix found here: http://www.freelists.org/archives/openbeos/11-2005/msg00090.html - -Fixes: -In file included from ./targ-cpu.h:1, - from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/obj-elf.h:42, - from ./obj-format.h:1, - from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/te-linux.h:4, - from ./targ-env.h:1, - from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/as.h:626, - from /home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/app.c:30: -/home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/binutils-2.15/gas/config/tc-i386.h:451: error: array type has incomplete element type -make[3]: *** [app.o] Error 1 -make[3]: Leaving directory `/home/dank/crosstool-new/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.2.2/build-binutils/gas' - -when building binutils-2.15 with gcc-4.0 - - -diff -ur binutils-2.15.old/gas/as.h binutils-2.15/gas/as.h ---- binutils-2.15.old/gas/as.h 2003-11-22 18:14:21.000000000 -0800 -+++ binutils-2.15/gas/as.h 2006-02-14 22:05:35.000000000 -0800 -@@ -605,7 +605,26 @@ - struct expressionS; - struct fix; - typedef struct symbol symbolS; --struct relax_type; -+ -+/* JF moved this here from as.h under the theory that nobody except MACHINE.c -+ and write.c care about it anyway. */ -+/* [zooey]: the above no longer holds with gcc4, as it keeps bugging about -+ incomplete element types in arrays, if relax_type isn't defined -+ here. So I moved the definition back from tc.h to here. */ -+struct relax_type -+{ -+ /* Forward reach. Signed number. > 0. */ -+ long rlx_forward; -+ /* Backward reach. Signed number. < 0. */ -+ long rlx_backward; -+ -+ /* Bytes length of this address. */ -+ unsigned char rlx_length; -+ -+ /* Next longer relax-state. 0 means there is no 'next' relax-state. */ -+ relax_substateT rlx_more; -+}; -+ - typedef struct frag fragS; - - #ifdef BFD_ASSEMBLER -diff -ur binutils-2.15.old/gas/tc.h binutils-2.15/gas/tc.h ---- binutils-2.15.old/gas/tc.h 2003-12-03 15:39:38.000000000 -0800 -+++ binutils-2.15/gas/tc.h 2006-02-14 22:03:35.000000000 -0800 -@@ -24,23 +24,6 @@ - - extern const pseudo_typeS md_pseudo_table[]; - --/* JF moved this here from as.h under the theory that nobody except MACHINE.c -- and write.c care about it anyway. */ -- --struct relax_type --{ -- /* Forward reach. Signed number. > 0. */ -- long rlx_forward; -- /* Backward reach. Signed number. < 0. */ -- long rlx_backward; -- -- /* Bytes length of this address. */ -- unsigned char rlx_length; -- -- /* Next longer relax-state. 0 means there is no 'next' relax-state. */ -- relax_substateT rlx_more; --}; -- - typedef struct relax_type relax_typeS; - - extern const int md_reloc_size; /* Size of a relocation record */ diff --git a/patches/binutils/2.15/binutils-2.15-psignal.patch b/patches/binutils/2.15/binutils-2.15-psignal.patch deleted file mode 100644 index 98fa600e..00000000 --- a/patches/binutils/2.15/binutils-2.15-psignal.patch +++ /dev/null @@ -1,40 +0,0 @@ -Make psignal prototype in libiberty match that in glibc. - -Fixes: - -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c: In function `psignal': -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `signo' doesn't match prototype -/usr/include/signal.h:131: prototype declaration -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `message' doesn't match prototype -/usr/include/signal.h:131: prototype declaration -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:568: warning: comparison between signed and unsigned -mprotect... make[1]: *** [strsignal.o] Error 1 -make[1]: Leaving directory `/export/hda3/dkegel/queue/jobdir.produser_cpsm17/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.1.3/build-binutils/libiberty' -make: *** [all-libiberty] Error 2 - -when building on red hat 7.1 -though it's a bit of a mystery why libiberty's psignal is being compiled at -all, since red hat 7.1's glibc supports psignal (hence the error message) - ---- binutils-2.15/libiberty/strsignal.c.old 2005-04-18 13:57:40.000000000 -0700 -+++ binutils-2.15/libiberty/strsignal.c 2005-04-18 13:59:09.000000000 -0700 -@@ -544,7 +544,7 @@ - - /* - --@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) -+@deftypefn Supplemental void psignal (int @var{signo}, const char *@var{message}) - - Print @var{message} to the standard error, followed by a colon, - followed by the description of the signal specified by @var{signo}, -@@ -557,9 +557,7 @@ - #ifndef HAVE_PSIGNAL - - void --psignal (signo, message) -- unsigned signo; -- char *message; -+psignal (int signo, const char *message) - { - if (signal_names == NULL) - { diff --git a/patches/binutils/2.15/binutils-2.15-solaris-qsort.patch b/patches/binutils/2.15/binutils-2.15-solaris-qsort.patch deleted file mode 100644 index 5fe36231..00000000 --- a/patches/binutils/2.15/binutils-2.15-solaris-qsort.patch +++ /dev/null @@ -1,22 +0,0 @@ -See http://sources.redhat.com/ml/binutils/2004-06/msg00114.html - ---- src/bfd/elflink.c.org 2004-07-05 09:11:42.920597000 -0400 -+++ src/bfd/elflink.c 2004-07-05 09:12:59.240847000 -0400 -@@ -2700,7 +2700,7 @@ - return vdiff > 0 ? 1 : -1; - else - { -- long sdiff = h1->root.u.def.section - h2->root.u.def.section; -+ long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id; - if (sdiff != 0) - return sdiff > 0 ? 1 : -1; - } -@@ -3954,7 +3954,7 @@ - i = idx + 1; - else - { -- long sdiff = slook - h->root.u.def.section; -+ long sdiff = slook->id - h->root.u.def.section->id; - if (sdiff < 0) - j = idx; - else if (sdiff > 0) diff --git a/patches/binutils/2.15/binutils-2.15-vmx.patch b/patches/binutils/2.15/binutils-2.15-vmx.patch deleted file mode 100644 index 5ae9efeb..00000000 --- a/patches/binutils/2.15/binutils-2.15-vmx.patch +++ /dev/null @@ -1,45 +0,0 @@ -Grabbed with -wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/opcodes/ppc-opc.c.diff?r1=1.70&r2=1.71&cvsroot=src' -See -http://mail.gnu.org/archive/html/bug-binutils/2004-05/msg00071.html -and -http://sources.redhat.com/ml/binutils-cvs/2004-05/msg00111.html - -This fixes problems like -{standard input}: Assembler messages: -{standard input}:1: Error: Unrecognized opcode: `dssall' -which show up in binutils-2.15 when building the Linux kernel, -or possibly failed compilations when building setjmp/longjmp in glibc. - -An alternative fix would be to pass -many to the assembler. -A patch to do that for glibc is at -wget 'http://sources.redhat.com/cgi-bin/get-raw-msg?listname=libc-alpha&date=2004-05&msgid=40B36E8C.9030609%40us.ibm.com' -Yet another, better, fix would be for gcc to generate assembly -that told the assembler which processor type to use. -Presumably the Linux kernel sources would need a fix, too. -Probably better to just fix binutils to accept sources that it used to. - - -=================================================================== -RCS file: /cvs/src/src/opcodes/ppc-opc.c,v -retrieving revision 1.70 -retrieving revision 1.71 -diff -u -r1.70 -r1.71 ---- src/opcodes/ppc-opc.c 2004/05/05 13:43:36 1.70 -+++ src/opcodes/ppc-opc.c 2004/05/19 05:11:48 1.71 -@@ -1004,8 +1004,13 @@ - - /* If only one bit of the FXM field is set, we can use the new form - of the instruction, which is faster. Unlike the Power4 branch hint -- encoding, this is not backward compatible. */ -- else if ((dialect & PPC_OPCODE_POWER4) != 0 && (value & -value) == value) -+ encoding, this is not backward compatible. Do not generate the -+ new form unless -mpower4 has been given, or -many and the two -+ operand form of mfcr was used. */ -+ else if ((value & -value) == value -+ && ((dialect & PPC_OPCODE_POWER4) != 0 -+ || ((dialect & PPC_OPCODE_ANY) != 0 -+ && (insn & (0x3ff << 1)) == 19 << 1))) - insn |= 1 << 20; - - /* Any other value on mfcr is an error. */ diff --git a/patches/binutils/2.15/binutils-arm-undef-imm.patch b/patches/binutils/2.15/binutils-arm-undef-imm.patch deleted file mode 100644 index 6bf403ca..00000000 --- a/patches/binutils/2.15/binutils-arm-undef-imm.patch +++ /dev/null @@ -1,51 +0,0 @@ -From http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gas/config/tc-arm.c.diff?r1=1.168&r2=1.169&cvsroot=src -See also http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-July/023128.html, -"[CRITICAL PATCH] 2.6: fix silent build error]" - -Revision 1.169, Fri Jul 2 11:12:29 2004 UTC (19 hours, 4 minutes ago) by nickc -Branch: MAIN -CVS Tags: binutils_latest_snapshot, HEAD -Changes since 1.168: +14 -1 lines - -(md_apply_fix3:BFD_RELOC_ARM_IMMEDIATE): Do not allow values which have come -from undefined symbols. -Always consider this fixup to have been processed as a reloc cannot be -generated for it. - - -=================================================================== -RCS file: /cvs/src/src/gas/config/tc-arm.c,v -retrieving revision 1.168 -retrieving revision 1.169 -diff -u -r1.168 -r1.169 ---- src/gas/config/tc-arm.c 2004/04/30 10:51:12 1.168 -+++ src/gas/config/tc-arm.c 2004/07/02 11:12:29 1.169 -@@ -12186,6 +12186,20 @@ - switch (fixP->fx_r_type) - { - case BFD_RELOC_ARM_IMMEDIATE: -+ /* We claim that this fixup has been processed here, -+ even if in fact we generate an error because we do -+ not have a reloc for it, so tc_gen_reloc will reject it. */ -+ fixP->fx_done = 1; -+ -+ if (fixP->fx_addsy -+ && ! S_IS_DEFINED (fixP->fx_addsy)) -+ { -+ as_bad_where (fixP->fx_file, fixP->fx_line, -+ _("undefined symbol %s used as an immediate value"), -+ S_GET_NAME (fixP->fx_addsy)); -+ break; -+ } -+ - newimm = validate_immediate (value); - temp = md_chars_to_number (buf, INSN_SIZE); - -@@ -12202,7 +12216,6 @@ - - newimm |= (temp & 0xfffff000); - md_number_to_chars (buf, (valueT) newimm, INSN_SIZE); -- fixP->fx_done = 1; - break; - - case BFD_RELOC_ARM_ADRL_IMMEDIATE: diff --git a/patches/binutils/2.15/binutils-skip-comments.patch b/patches/binutils/2.15/binutils-skip-comments.patch deleted file mode 100644 index 804a17e0..00000000 --- a/patches/binutils/2.15/binutils-skip-comments.patch +++ /dev/null @@ -1,101 +0,0 @@ -Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html -Fixes -localealias.s:544: Error: junk at end of line, first unrecognized character is `,' -when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3 - -Paths adjusted to match crosstool's patcher. - -Message-Id: m3n052qw2g.fsf@whitebox.m5r.de -From: Andreas Schwab -To: Nathan Sidwell -Cc: Ian Lance Taylor , binutils at sources dot redhat dot com -Date: Fri, 23 Apr 2004 22:27:19 +0200 -Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line - -Nathan Sidwell writes: - -> Index: read.c -> =================================================================== -> RCS file: /cvs/src/src/gas/read.c,v -> retrieving revision 1.76 -> diff -c -3 -p -r1.76 read.c -> *** read.c 12 Mar 2004 17:48:12 -0000 1.76 -> --- read.c 18 Mar 2004 09:56:05 -0000 -> *************** read_a_source_file (char *name) -> *** 1053,1059 **** -> #endif -> input_line_pointer--; -> /* Report unknown char as ignored. */ -> ! ignore_rest_of_line (); -> } -> -> #ifdef md_after_pass_hook -> --- 1053,1059 ---- -> #endif -> input_line_pointer--; -> /* Report unknown char as ignored. */ -> ! demand_empty_rest_of_line (); -> } -> -> #ifdef md_after_pass_hook - -This means that the unknown character is no longer ignored, despite the -comment. As a side effect a line starting with a line comment character -not followed by APP in NO_APP mode now triggers an error instead of just a -warning, breaking builds of glibc on m68k-linux. Earlier in -read_a_source_file where #APP is handled there is another comment that -claims that unknown comments are ignored, when in fact they aren't (only -the initial line comment character is skipped). - -Note that the presence of #APP will mess up the line counters, but -that appears to be difficult to fix. - -Andreas. - -2004-04-23 Andreas Schwab - - * read.c (read_a_source_file): Ignore unknown text after line - comment character. Fix misleading comment. - ---- binutils/gas/read.c.~1.78.~ 2004-04-23 08:58:23.000000000 +0200 -+++ binutils/gas/read.c 2004-04-23 21:49:01.000000000 +0200 -@@ -1,6 +1,6 @@ - /* read.c - read a source file - - Copyright 1986, 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, -- 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -+ 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This file is part of GAS, the GNU Assembler. - -@@ -950,10 +950,14 @@ read_a_source_file (char *name) - unsigned int new_length; - char *tmp_buf = 0; - -- bump_line_counters (); - s = input_line_pointer; - if (strncmp (s, "APP\n", 4)) -- continue; /* We ignore it */ -+ { -+ /* We ignore it */ -+ ignore_rest_of_line (); -+ continue; -+ } -+ bump_line_counters (); - s += 4; - - sb_new (&sbuf); -@@ -1052,7 +1056,7 @@ read_a_source_file (char *name) - continue; - #endif - input_line_pointer--; -- /* Report unknown char as ignored. */ -+ /* Report unknown char as error. */ - demand_empty_rest_of_line (); - } - - --- -Andreas Schwab, SuSE Labs, schwab@suse.de -SuSE Linux AG, MaxfeldstraÃe 5, 90409 NÃrnberg, Germany -Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 -"And now for something completely different." diff --git a/patches/binutils/2.15/cross-gprof.patch b/patches/binutils/2.15/cross-gprof.patch deleted file mode 100644 index ea6c18fd..00000000 --- a/patches/binutils/2.15/cross-gprof.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- binutils-2.15/configure.old 2004-07-21 21:36:47.000000000 -0700 -+++ binutils-2.15/configure 2004-07-21 21:37:08.000000000 -0700 -@@ -999,7 +999,7 @@ - - # Some tools are only suitable for building in a "native" situation. - # Remove these if host!=target. --native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" -+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" - - # Similarly, some are only suitable for cross toolchains. - # Remove these if host=target. ---- binutils-2.15/configure.in.old 2004-07-21 21:37:19.000000000 -0700 -+++ binutils-2.15/configure.in 2004-07-21 21:37:34.000000000 -0700 -@@ -236,7 +236,7 @@ - - # Some tools are only suitable for building in a "native" situation. - # Remove these if host!=target. --native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" -+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" - - # Similarly, some are only suitable for cross toolchains. - # Remove these if host=target. diff --git a/patches/binutils/2.15/gccpr15247-fix.patch b/patches/binutils/2.15/gccpr15247-fix.patch deleted file mode 100644 index 967bf7f9..00000000 --- a/patches/binutils/2.15/gccpr15247-fix.patch +++ /dev/null @@ -1,192 +0,0 @@ -See -http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15247 - -Fixes spurious error -/tmp/ccvNi4ou.s: Assembler messages: -/tmp/ccvNi4ou.s:2310: Error: Illegal operands: There are only 32 single precision f registers; [0-31] -make[2]: *** [/home/dank/wk/crosstool-0.28-rc10/build/sparc64-unknown-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/math/dosincos.o] Error 1 - -when compiling glibc's dosincos.c with gcc-3.4.0 - -=================================================================== -RCS file: /cvs/src/src/opcodes/sparc-opc.c,v -retrieving revision 1.9 -retrieving revision 1.10 -diff -u -r1.9 -r1.10 ---- src/opcodes/sparc-opc.c 2004/01/18 23:46:32 1.9 -+++ src/opcodes/sparc-opc.c 2004/04/20 10:23:51 1.10 -@@ -1273,110 +1273,72 @@ - #define FM_DF 2 /* v9 */ - #define FM_QF 3 /* v9 */ - --#define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \ --{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags, v9 }, \ --{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags, v9 } -- --#define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \ --{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \ --{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \ --{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \ --{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 } -+#define fmoviccx(opcode, fpsize, args, cond, flags) /* v9 */ \ -+{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags, v9 } -+ -+#define fmovfccx(opcode, fpsize, args, fcond, flags) /* v9 */ \ -+{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags, v9 } - - /* FIXME: use fmovicc/fmovfcc? */ /* v9 */ --#define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \ --{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags | F_FLOAT, v9 }, \ --{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags | F_FLOAT, v9 }, \ --{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags | F_FLOAT, v9 }, \ --{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags | F_FLOAT, v9 }, \ --{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags | F_FLOAT, v9 }, \ --{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags | F_FLOAT, v9 } -- --/* v9 */ fmovcc ("fmovda", FM_DF, CONDA, FCONDA, 0), --/* v9 */ fmovcc ("fmovqa", FM_QF, CONDA, FCONDA, 0), --/* v9 */ fmovcc ("fmovsa", FM_SF, CONDA, FCONDA, 0), --/* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0), --/* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0), --/* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0), --/* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0), --/* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0), --/* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0), --/* v9 */ fmovcc ("fmovde", FM_DF, CONDE, FCONDE, 0), --/* v9 */ fmovcc ("fmovqe", FM_QF, CONDE, FCONDE, 0), --/* v9 */ fmovcc ("fmovse", FM_SF, CONDE, FCONDE, 0), --/* v9 */ fmovcc ("fmovdg", FM_DF, CONDG, FCONDG, 0), --/* v9 */ fmovcc ("fmovqg", FM_QF, CONDG, FCONDG, 0), --/* v9 */ fmovcc ("fmovsg", FM_SF, CONDG, FCONDG, 0), --/* v9 */ fmovcc ("fmovdge", FM_DF, CONDGE, FCONDGE, 0), --/* v9 */ fmovcc ("fmovqge", FM_QF, CONDGE, FCONDGE, 0), --/* v9 */ fmovcc ("fmovsge", FM_SF, CONDGE, FCONDGE, 0), --/* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS), --/* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS), --/* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS), --/* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0), --/* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0), --/* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0), --/* v9 */ fmovcc ("fmovdl", FM_DF, CONDL, FCONDL, 0), --/* v9 */ fmovcc ("fmovql", FM_QF, CONDL, FCONDL, 0), --/* v9 */ fmovcc ("fmovsl", FM_SF, CONDL, FCONDL, 0), --/* v9 */ fmovcc ("fmovdle", FM_DF, CONDLE, FCONDLE, 0), --/* v9 */ fmovcc ("fmovqle", FM_QF, CONDLE, FCONDLE, 0), --/* v9 */ fmovcc ("fmovsle", FM_SF, CONDLE, FCONDLE, 0), --/* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0), --/* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0), --/* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0), --/* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0), --/* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0), --/* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0), --/* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS), --/* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS), --/* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS), --/* v9 */ fmovcc ("fmovdn", FM_DF, CONDN, FCONDN, 0), --/* v9 */ fmovcc ("fmovqn", FM_QF, CONDN, FCONDN, 0), --/* v9 */ fmovcc ("fmovsn", FM_SF, CONDN, FCONDN, 0), --/* v9 */ fmovcc ("fmovdne", FM_DF, CONDNE, FCONDNE, 0), --/* v9 */ fmovcc ("fmovqne", FM_QF, CONDNE, FCONDNE, 0), --/* v9 */ fmovcc ("fmovsne", FM_SF, CONDNE, FCONDNE, 0), --/* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0), --/* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0), --/* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0), --/* v9 */ fmovcc ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS), --/* v9 */ fmovcc ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS), --/* v9 */ fmovcc ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS), --/* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0), --/* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0), --/* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0), --/* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0), --/* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0), --/* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0), --/* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0), --/* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0), --/* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0), --/* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0), --/* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0), --/* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0), --/* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0), --/* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0), --/* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0), --/* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0), --/* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0), --/* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0), --/* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0), --/* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0), --/* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0), --/* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0), --/* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0), --/* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0), --/* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0), --/* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0), --/* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0), --/* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0), --/* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0), --/* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0), --/* v9 */ fmovcc ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS), --/* v9 */ fmovcc ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS), --/* v9 */ fmovcc ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS), -- -+#define fmovccx(opcode, fpsize, args, cond, fcond, flags) /* v9 */ \ -+{ opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z," args, flags | F_FLOAT, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6," args, flags | F_FLOAT, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z," args, flags | F_FLOAT, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7," args, flags | F_FLOAT, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8," args, flags | F_FLOAT, v9 }, \ -+{ opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9," args, flags | F_FLOAT, v9 } -+ -+#define fmovicc(suffix, cond, flags) /* v9 */ \ -+fmoviccx("fmovd" suffix, FM_DF, "B,H", cond, flags), \ -+fmoviccx("fmovq" suffix, FM_QF, "R,J", cond, flags), \ -+fmoviccx("fmovs" suffix, FM_SF, "f,g", cond, flags) -+ -+#define fmovfcc(suffix, fcond, flags) /* v9 */ \ -+fmovfccx("fmovd" suffix, FM_DF, "B,H", fcond, flags), \ -+fmovfccx("fmovq" suffix, FM_QF, "R,J", fcond, flags), \ -+fmovfccx("fmovs" suffix, FM_SF, "f,g", fcond, flags) -+ -+#define fmovcc(suffix, cond, fcond, flags) /* v9 */ \ -+fmovccx("fmovd" suffix, FM_DF, "B,H", cond, fcond, flags), \ -+fmovccx("fmovq" suffix, FM_QF, "R,J", cond, fcond, flags), \ -+fmovccx("fmovs" suffix, FM_SF, "f,g", cond, fcond, flags) -+ -+/* v9 */ fmovcc ("a", CONDA, FCONDA, 0), -+/* v9 */ fmovicc ("cc", CONDCC, 0), -+/* v9 */ fmovicc ("cs", CONDCS, 0), -+/* v9 */ fmovcc ("e", CONDE, FCONDE, 0), -+/* v9 */ fmovcc ("g", CONDG, FCONDG, 0), -+/* v9 */ fmovcc ("ge", CONDGE, FCONDGE, 0), -+/* v9 */ fmovicc ("geu", CONDGEU, F_ALIAS), -+/* v9 */ fmovicc ("gu", CONDGU, 0), -+/* v9 */ fmovcc ("l", CONDL, FCONDL, 0), -+/* v9 */ fmovcc ("le", CONDLE, FCONDLE, 0), -+/* v9 */ fmovicc ("leu", CONDLEU, 0), -+/* v9 */ fmovfcc ("lg", FCONDLG, 0), -+/* v9 */ fmovicc ("lu", CONDLU, F_ALIAS), -+/* v9 */ fmovcc ("n", CONDN, FCONDN, 0), -+/* v9 */ fmovcc ("ne", CONDNE, FCONDNE, 0), -+/* v9 */ fmovicc ("neg", CONDNEG, 0), -+/* v9 */ fmovcc ("nz", CONDNZ, FCONDNZ, F_ALIAS), -+/* v9 */ fmovfcc ("o", FCONDO, 0), -+/* v9 */ fmovicc ("pos", CONDPOS, 0), -+/* v9 */ fmovfcc ("u", FCONDU, 0), -+/* v9 */ fmovfcc ("ue", FCONDUE, 0), -+/* v9 */ fmovfcc ("ug", FCONDUG, 0), -+/* v9 */ fmovfcc ("uge", FCONDUGE, 0), -+/* v9 */ fmovfcc ("ul", FCONDUL, 0), -+/* v9 */ fmovfcc ("ule", FCONDULE, 0), -+/* v9 */ fmovicc ("vc", CONDVC, 0), -+/* v9 */ fmovicc ("vs", CONDVS, 0), -+/* v9 */ fmovcc ("z", CONDZ, FCONDZ, F_ALIAS), -+ -+#undef fmoviccx /* v9 */ -+#undef fmovfccx /* v9 */ -+#undef fmovccx /* v9 */ - #undef fmovicc /* v9 */ - #undef fmovfcc /* v9 */ - #undef fmovcc /* v9 */ diff --git a/patches/binutils/2.15/ld-2.15-callahan.patch b/patches/binutils/2.15/ld-2.15-callahan.patch deleted file mode 100644 index bb4a69c8..00000000 --- a/patches/binutils/2.15/ld-2.15-callahan.patch +++ /dev/null @@ -1,677 +0,0 @@ -Signed-off-by: dank@kegel.com -Fixes ld speed issue. -See http://weblogs.mozillazine.org/roc/archives/2005/02/optimizing_gnu.html -See thread "Re: optimizations for 3x speedup in ld", -http://sources.redhat.com/ml/binutils/2005-03/msg00847.html - -Wildcard section matching enhancement, backported from the binutils CVS tree. -Here's the CVS log comment from the original change to ldlang.c: - -revision 1.177 -date: 2005/04/06 15:33:02; author: jakub; state: Exp; lines: +438 -51 -2005-04-06 Jakub Jelinek - - * ldlang.c: Formatting. - (walk_wild_consider_section): Remember return value from wildcardp. - (is_simple_wild): Use strcspn instead of 2 strpbrk calls and strlen. - (wild_spec_can_overlap): Use strcspn instead of strpbrk and strlen. - -2005-04-06 Robert O'Callahan - - * ld.h (lean_section_userdata_type): Remove. - (fat_section_userdata_type): Remove file field. - (SECTION_USERDATA_SIZE): Remove. - * ldlang.c (init_os): Eliminate initialization of unused - lean_section_userdata_type. - - * ldlang.h (callback_t, walk_wild_section_handler_t): New - typedefs. - (struct lang_wild_statement_struct): Add walk_wild_section_handler - and handler_data fields. - * ldlang.c (callback_t): Removed. - (walk_wild_consider_section, walk_wild_section_general, - section_iterator_callback, find_section, is_simple_wild, - match_simple_wild, walk_wild_section_specs1_wild0, - walk_wild_section_specs1_wild1, walk_wild_section_specs2_wild1, - walk_wild_section_specs3_wild2, walk_wild_section_specs4_wild2, - wild_spec_can_overlap, analyze_walk_wild_section_handler): New - functions. - (lang_add_wild): Call analyze_walk_wild_section_handler. - (walk_wild_section): Renamed to walk_wild_section_general and - created a wrapper function. - (section_iterator_callback_data): New typedef. - -Note that bfd_get_section_by_name_if didn't exist in 2.15, so it was backported -as well. - ---- binutils-2.15/bfd/bfd-in2.h.old 2004-05-17 15:35:56.000000000 -0400 -+++ binutils-2.15/bfd/bfd-in2.h 2006-02-09 11:54:45.989940000 -0500 -@@ -1425,6 +1425,10 @@ - - asection *bfd_get_section_by_name (bfd *abfd, const char *name); - -+asection *bfd_get_section_by_name_if (bfd *abfd, const char *name, -+ bfd_boolean (*operation) (bfd *, asection *, void *), -+ void *user_storage); -+ - char *bfd_get_unique_section_name - (bfd *abfd, const char *templat, int *count); - ---- binutils-2.15/bfd/section.c.old 2003-12-01 01:33:01.000000000 -0500 -+++ binutils-2.15/bfd/section.c 2006-01-23 14:16:54.768993000 -0500 -@@ -801,6 +801,57 @@ - - /* - FUNCTION -+ bfd_get_section_by_name_if -+ -+SYNOPSIS -+ asection *bfd_get_section_by_name_if -+ (bfd *abfd, -+ const char *name, -+ bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), -+ void *obj); -+ -+DESCRIPTION -+ Call the provided function @var{func} for each section -+ attached to the BFD @var{abfd} whose name matches @var{name}, -+ passing @var{obj} as an argument. The function will be called -+ as if by -+ -+| func (abfd, the_section, obj); -+ -+ It returns the first section for which @var{func} returns true, -+ otherwise <>. -+ -+*/ -+ -+asection * -+bfd_get_section_by_name_if (bfd *abfd, const char *name, -+ bfd_boolean (*operation) (bfd *, -+ asection *, -+ void *), -+ void *user_storage) -+{ -+ struct section_hash_entry *sh; -+ unsigned long hash; -+ -+ sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE); -+ if (sh == NULL) -+ return NULL; -+ -+ hash = sh->root.hash; -+ do -+ { -+ if ((*operation) (abfd, &sh->section, user_storage)) -+ return &sh->section; -+ sh = (struct section_hash_entry *) sh->root.next; -+ } -+ while (sh != NULL && sh->root.hash == hash -+ && strcmp (sh->root.string, name) == 0); -+ -+ return NULL; -+} -+ -+/* -+FUNCTION - bfd_get_unique_section_name - - SYNOPSIS ---- binutils-2.15/ld/ldlang.c.old 2004-05-17 15:36:16.000000000 -0400 -+++ binutils-2.15/ld/ldlang.c 2006-01-23 13:40:12.745499000 -0500 -@@ -81,9 +81,6 @@ - static void lang_record_phdrs (void); - static void lang_do_version_exports_section (void); - --typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, -- asection *, lang_input_statement_type *, void *); -- - /* Exported variables. */ - lang_output_section_statement_type *abs_output_section; - lang_statement_list_type lang_output_section_statement; -@@ -138,21 +135,71 @@ - - /* Generic traversal routines for finding matching sections. */ - -+/* Try processing a section against a wildcard. This just calls -+ the callback unless the filename exclusion list is present -+ and excludes the file. It's hardly ever present so this -+ function is very fast. */ -+ -+static void -+walk_wild_consider_section (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ asection *s, -+ struct wildcard_list *sec, -+ callback_t callback, -+ void *data) -+{ -+ bfd_boolean skip = FALSE; -+ struct name_list *list_tmp; -+ -+ /* Don't process sections from files which were -+ excluded. */ -+ for (list_tmp = sec->spec.exclude_name_list; -+ list_tmp; -+ list_tmp = list_tmp->next) -+ { -+ bfd_boolean is_wildcard = wildcardp (list_tmp->name); -+ if (is_wildcard) -+ skip = fnmatch (list_tmp->name, file->filename, 0) == 0; -+ else -+ skip = strcmp (list_tmp->name, file->filename) == 0; -+ -+ /* If this file is part of an archive, and the archive is -+ excluded, exclude this file. */ -+ if (! skip && file->the_bfd != NULL -+ && file->the_bfd->my_archive != NULL -+ && file->the_bfd->my_archive->filename != NULL) -+ { -+ if (is_wildcard) -+ skip = fnmatch (list_tmp->name, -+ file->the_bfd->my_archive->filename, -+ 0) == 0; -+ else -+ skip = strcmp (list_tmp->name, -+ file->the_bfd->my_archive->filename) == 0; -+ } -+ -+ if (skip) -+ break; -+ } -+ -+ if (!skip) -+ (*callback) (ptr, sec, s, file, data); -+} -+ -+/* Lowest common denominator routine that can handle everything correctly, -+ but slowly. */ -+ - static void --walk_wild_section (lang_wild_statement_type *ptr, -- lang_input_statement_type *file, -- callback_t callback, -- void *data) -+walk_wild_section_general (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) - { - asection *s; -- -- if (file->just_syms_flag) -- return; -+ struct wildcard_list *sec; - - for (s = file->the_bfd->sections; s != NULL; s = s->next) - { -- struct wildcard_list *sec; -- - sec = ptr->section_list; - if (sec == NULL) - (*callback) (ptr, sec, s, file, data); -@@ -160,39 +207,8 @@ - while (sec != NULL) - { - bfd_boolean skip = FALSE; -- struct name_list *list_tmp; -- -- /* Don't process sections from files which were -- excluded. */ -- for (list_tmp = sec->spec.exclude_name_list; -- list_tmp; -- list_tmp = list_tmp->next) -- { -- if (wildcardp (list_tmp->name)) -- skip = fnmatch (list_tmp->name, file->filename, 0) == 0; -- else -- skip = strcmp (list_tmp->name, file->filename) == 0; -- -- /* If this file is part of an archive, and the archive is -- excluded, exclude this file. */ -- if (! skip && file->the_bfd != NULL -- && file->the_bfd->my_archive != NULL -- && file->the_bfd->my_archive->filename != NULL) -- { -- if (wildcardp (list_tmp->name)) -- skip = fnmatch (list_tmp->name, -- file->the_bfd->my_archive->filename, -- 0) == 0; -- else -- skip = strcmp (list_tmp->name, -- file->the_bfd->my_archive->filename) == 0; -- } -- -- if (skip) -- break; -- } - -- if (!skip && sec->spec.name != NULL) -+ if (sec->spec.name != NULL) - { - const char *sname = bfd_get_section_name (file->the_bfd, s); - -@@ -203,13 +219,381 @@ - } - - if (!skip) -- (*callback) (ptr, sec, s, file, data); -+ walk_wild_consider_section (ptr, file, s, sec, callback, data); - - sec = sec->next; - } - } - } - -+/* Routines to find a single section given its name. If there's more -+ than one section with that name, we report that. */ -+ -+typedef struct -+{ -+ asection *found_section; -+ bfd_boolean multiple_sections_found; -+} section_iterator_callback_data; -+ -+static bfd_boolean -+section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data) -+{ -+ section_iterator_callback_data *d = data; -+ -+ if (d->found_section != NULL) -+ { -+ d->multiple_sections_found = TRUE; -+ return TRUE; -+ } -+ -+ d->found_section = s; -+ return FALSE; -+} -+ -+static asection * -+find_section (lang_input_statement_type *file, -+ struct wildcard_list *sec, -+ bfd_boolean *multiple_sections_found) -+{ -+ section_iterator_callback_data cb_data = { NULL, FALSE }; -+ -+ bfd_get_section_by_name_if (file->the_bfd, sec->spec.name, -+ section_iterator_callback, &cb_data); -+ *multiple_sections_found = cb_data.multiple_sections_found; -+ return cb_data.found_section; -+} -+ -+/* Code for handling simple wildcards without going through fnmatch, -+ which can be expensive because of charset translations etc. */ -+ -+/* A simple wild is a literal string followed by a single '*', -+ where the literal part is at least 4 characters long. */ -+ -+static bfd_boolean -+is_simple_wild (const char *name) -+{ -+ size_t len = strcspn (name, "*?["); -+ return len >= 4 && name[len] == '*' && name[len + 1] == '\0'; -+} -+ -+static bfd_boolean -+match_simple_wild (const char *pattern, const char *name) -+{ -+ /* The first four characters of the pattern are guaranteed valid -+ non-wildcard characters. So we can go faster. */ -+ if (pattern[0] != name[0] || pattern[1] != name[1] -+ || pattern[2] != name[2] || pattern[3] != name[3]) -+ return FALSE; -+ -+ pattern += 4; -+ name += 4; -+ while (*pattern != '*') -+ if (*name++ != *pattern++) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+/* Specialized, optimized routines for handling different kinds of -+ wildcards */ -+ -+static void -+walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ /* We can just do a hash lookup for the section with the right name. -+ But if that lookup discovers more than one section with the name -+ (should be rare), we fall back to the general algorithm because -+ we would otherwise have to sort the sections to make sure they -+ get processed in the bfd's order. */ -+ bfd_boolean multiple_sections_found; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ walk_wild_section_general (ptr, file, callback, data); -+ else if (s0) -+ walk_wild_consider_section (ptr, file, s0, sec0, callback, data); -+} -+ -+static void -+walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *wildsec0 = ptr->handler_data[0]; -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec0, callback, data); -+ } -+} -+ -+static void -+walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *wildsec1 = ptr->handler_data[1]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ /* Note that if the section was not found, s0 is NULL and -+ we'll simply never succeed the s == s0 test below. */ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ /* Recall that in this code path, a section cannot satisfy more -+ than one spec, so if s == s0 then it cannot match -+ wildspec1. */ -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec1, callback, -+ data); -+ } -+ } -+} -+ -+static void -+walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *wildsec1 = ptr->handler_data[1]; -+ struct wildcard_list *wildsec2 = ptr->handler_data[2]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec1, callback, data); -+ else -+ { -+ skip = !match_simple_wild (wildsec2->spec.name, sname); -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec2, callback, -+ data); -+ } -+ } -+ } -+} -+ -+static void -+walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *sec1 = ptr->handler_data[1]; -+ struct wildcard_list *wildsec2 = ptr->handler_data[2]; -+ struct wildcard_list *wildsec3 = ptr->handler_data[3]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1; -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ s1 = find_section (file, sec1, &multiple_sections_found); -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ if (s == s1) -+ walk_wild_consider_section (ptr, file, s, sec1, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec2->spec.name, -+ sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec2, callback, -+ data); -+ else -+ { -+ skip = !match_simple_wild (wildsec3->spec.name, sname); -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec3, -+ callback, data); -+ } -+ } -+ } -+} -+ -+static void -+walk_wild_section (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ if (file->just_syms_flag) -+ return; -+ -+ (*ptr->walk_wild_section_handler) (ptr, file, callback, data); -+} -+ -+/* Returns TRUE when name1 is a wildcard spec that might match -+ something name2 can match. We're conservative: we return FALSE -+ only if the prefixes of name1 and name2 are different up to the -+ first wildcard character. */ -+ -+static bfd_boolean -+wild_spec_can_overlap (const char *name1, const char *name2) -+{ -+ size_t prefix1_len = strcspn (name1, "?*["); -+ size_t prefix2_len = strcspn (name2, "?*["); -+ size_t min_prefix_len; -+ -+ /* Note that if there is no wildcard character, then we treat the -+ terminating 0 as part of the prefix. Thus ".text" won't match -+ ".text." or ".text.*", for example. */ -+ if (name1[prefix1_len] == '\0') -+ prefix1_len++; -+ if (name2[prefix2_len] == '\0') -+ prefix2_len++; -+ -+ min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len; -+ -+ return memcmp (name1, name2, min_prefix_len) == 0; -+} -+ -+/* Select specialized code to handle various kinds of wildcard -+ statements. */ -+ -+static void -+analyze_walk_wild_section_handler (lang_wild_statement_type *ptr) -+{ -+ int sec_count = 0; -+ int wild_name_count = 0; -+ struct wildcard_list *sec; -+ int signature; -+ int data_counter; -+ -+ ptr->walk_wild_section_handler = walk_wild_section_general; -+ -+ /* Count how many wildcard_specs there are, and how many of those -+ actually use wildcards in the name. Also, bail out if any of the -+ wildcard names are NULL. (Can this actually happen? -+ walk_wild_section used to test for it.) And bail out if any -+ of the wildcards are more complex than a simple string -+ ending in a single '*'. */ -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ { -+ ++sec_count; -+ if (sec->spec.name == NULL) -+ return; -+ if (wildcardp (sec->spec.name)) -+ { -+ ++wild_name_count; -+ if (!is_simple_wild (sec->spec.name)) -+ return; -+ } -+ } -+ -+ /* The zero-spec case would be easy to optimize but it doesn't -+ happen in practice. Likewise, more than 4 specs doesn't -+ happen in practice. */ -+ if (sec_count == 0 || sec_count > 4) -+ return; -+ -+ /* Check that no two specs can match the same section. */ -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ { -+ struct wildcard_list *sec2; -+ for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next) -+ { -+ if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name)) -+ return; -+ } -+ } -+ -+ signature = (sec_count << 8) + wild_name_count; -+ switch (signature) -+ { -+ case 0x0100: -+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0; -+ break; -+ case 0x0101: -+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1; -+ break; -+ case 0x0201: -+ ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1; -+ break; -+ case 0x0302: -+ ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2; -+ break; -+ case 0x0402: -+ ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2; -+ break; -+ default: -+ return; -+ } -+ -+ /* Now fill the data array with pointers to the specs, first the -+ specs with non-wildcard names, then the specs with wildcard -+ names. It's OK to process the specs in different order from the -+ given order, because we've already determined that no section -+ will match more than one spec. */ -+ data_counter = 0; -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ if (!wildcardp (sec->spec.name)) -+ ptr->handler_data[data_counter++] = sec; -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ if (wildcardp (sec->spec.name)) -+ ptr->handler_data[data_counter++] = sec; -+} -+ - /* Handle a wild statement for a single file F. */ - - static void -@@ -4353,6 +4737,7 @@ - new->section_list = section_list; - new->keep_sections = keep_sections; - lang_list_init (&new->children); -+ analyze_walk_wild_section_handler (new); - } - - void ---- binutils-2.15/ld/ldlang.h.old 2004-05-17 15:36:16.000000000 -0400 -+++ binutils-2.15/ld/ldlang.h 2006-01-23 13:32:33.653292000 -0500 -@@ -295,7 +295,17 @@ - union lang_statement_union *file; - } lang_afile_asection_pair_statement_type; - --typedef struct lang_wild_statement_struct -+typedef struct lang_wild_statement_struct lang_wild_statement_type; -+ -+typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, -+ asection *, lang_input_statement_type *, void *); -+ -+typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *, -+ lang_input_statement_type *, -+ callback_t callback, -+ void *data); -+ -+struct lang_wild_statement_struct - { - lang_statement_header_type header; - const char *filename; -@@ -303,7 +313,10 @@ - struct wildcard_list *section_list; - bfd_boolean keep_sections; - lang_statement_list_type children; --} lang_wild_statement_type; -+ -+ walk_wild_section_handler_t walk_wild_section_handler; -+ struct wildcard_list *handler_data[4]; -+}; - - typedef struct lang_address_statement_struct - { diff --git a/patches/binutils/2.15/ld-2.15-stabs-tweak.patch b/patches/binutils/2.15/ld-2.15-stabs-tweak.patch deleted file mode 100644 index bd6ae7a1..00000000 --- a/patches/binutils/2.15/ld-2.15-stabs-tweak.patch +++ /dev/null @@ -1,33 +0,0 @@ -Signed-off-by: dank@kegel.com - -See http://sourceware.org/ml/binutils/2005-12/msg00270.html -http://sourceware.org/ml/binutils-cvs/2005-12/msg00139.html - -STABS hash table size change, backported from the binutils CVS tree. Here's -the CVS log comment for the original change: - -revision 1.25 -date: 2005/12/29 10:29:23; author: nickc; state: Exp; lines: +2 -3 -(_bfd_link_section_stabs): Use bfd_hash_table_init rather than -bfd_hash_table_init_n(...,251) so that the size of the hash table can be -controlled by the user. - -Note that tunable hash table size changes were added after 2.15. The effect -of this change is to make bfd use its default hash table size for the stabs -hash as well. - - ---- binutils-2.15/bfd/stabs.c.old 2004-05-17 15:36:04.000000000 -0400 -+++ binutils-2.15/bfd/stabs.c 2006-02-09 15:21:56.567014000 -0500 -@@ -241,9 +241,8 @@ - goto error_return; - /* Make sure the first byte is zero. */ - (void) _bfd_stringtab_add (sinfo->strings, "", TRUE, TRUE); -- if (! bfd_hash_table_init_n (&sinfo->includes.root, -- stab_link_includes_newfunc, -- 251)) -+ if (! bfd_hash_table_init (&sinfo->includes.root, -+ stab_link_includes_newfunc)) - goto error_return; - sinfo->stabstr = bfd_make_section_anyway (abfd, ".stabstr"); - sinfo->stabstr->flags |= SEC_HAS_CONTENTS | SEC_READONLY | SEC_DEBUGGING; diff --git a/patches/binutils/2.15/s390-invalid-insn-format.patch b/patches/binutils/2.15/s390-invalid-insn-format.patch deleted file mode 100644 index 32962015..00000000 --- a/patches/binutils/2.15/s390-invalid-insn-format.patch +++ /dev/null @@ -1,42 +0,0 @@ -Message-ID: <000801c48f60$cec16630$9103a8c0@ULOC5012> -From: "Michael Geiger" -To: -Subject: Patch for cross compiling s/390 kernel on linux host -Date: Tue, 31 Aug 2004 15:45:41 +0200 - -Dear Dan, - -I had big problems compiling a kernel for s/390 on my linux host - I tried -different chains from crosstool-0.28-rc34 and finally succeded with -gcc-3.3.4-glibc-2.3.2 after applying another patch to binutils-2.15 -(attached). -All compilations of the different kernel versions I tried stopped with -"Invalid .insn format" somewhere. I checked the recent cvs version of -binutils and applied the latest diff to gas/config/tc-s390.c and that solved -it. - -Greetings - -Michael Geiger - - -diff -u -r1.39 -r1.40 ---- src/gas/config/tc-s390.c 2004/05/06 11:01:48 1.39 -+++ src/gas/config/tc-s390.c 2004/06/15 12:38:08 1.40 -@@ -1596,13 +1596,13 @@ - if (exp.X_op == O_constant) - { - if ( ( opformat->oplen == 6 -- && exp.X_add_number >= 0 -+ && (addressT) exp.X_add_number >= 0 - && (addressT) exp.X_add_number < (1ULL << 48)) - || ( opformat->oplen == 4 -- && exp.X_add_number >= 0 -+ && (addressT) exp.X_add_number >= 0 - && (addressT) exp.X_add_number < (1ULL << 32)) - || ( opformat->oplen == 2 -- && exp.X_add_number >= 0 -+ && (addressT) exp.X_add_number >= 0 - && (addressT) exp.X_add_number < (1ULL << 16))) - md_number_to_chars (insn, exp.X_add_number, opformat->oplen); - else diff --git a/patches/binutils/2.16.1/100-bfd-hash-tweak.patch b/patches/binutils/2.16.1/100-bfd-hash-tweak.patch new file mode 100644 index 00000000..c6de93a9 --- /dev/null +++ b/patches/binutils/2.16.1/100-bfd-hash-tweak.patch @@ -0,0 +1,23 @@ +Signed-off-by: dank@kegel.com + +Raising the size of the hash table is a noticable win when linking +at least one large app. + +There was a patch, +http://sources.redhat.com/ml/binutils/2004-06/msg00165.html +to do this dynamically. No idea why that didn't make it in. +So this tiny change to raise the default size is just +a stopgap for now. + + +--- binutils-2.16.1/bfd/hash.c.old 2006-03-02 23:01:39.000000000 -0800 ++++ binutils-2.16.1/bfd/hash.c 2006-03-02 23:01:58.000000000 -0800 +@@ -300,7 +300,7 @@ + */ + + /* The default number of entries to use when creating a hash table. */ +-#define DEFAULT_SIZE 4051 ++#define DEFAULT_SIZE 32749 + static size_t bfd_default_hash_table_size = DEFAULT_SIZE; + + /* Create a new hash table, given a number of entries. */ diff --git a/patches/binutils/2.16.1/110-binutils-2.15-psignal.patch b/patches/binutils/2.16.1/110-binutils-2.15-psignal.patch new file mode 100644 index 00000000..98fa600e --- /dev/null +++ b/patches/binutils/2.16.1/110-binutils-2.15-psignal.patch @@ -0,0 +1,40 @@ +Make psignal prototype in libiberty match that in glibc. + +Fixes: + +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c: In function `psignal': +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `signo' doesn't match prototype +/usr/include/signal.h:131: prototype declaration +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `message' doesn't match prototype +/usr/include/signal.h:131: prototype declaration +gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:568: warning: comparison between signed and unsigned +mprotect... make[1]: *** [strsignal.o] Error 1 +make[1]: Leaving directory `/export/hda3/dkegel/queue/jobdir.produser_cpsm17/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.1.3/build-binutils/libiberty' +make: *** [all-libiberty] Error 2 + +when building on red hat 7.1 +though it's a bit of a mystery why libiberty's psignal is being compiled at +all, since red hat 7.1's glibc supports psignal (hence the error message) + +--- binutils-2.15/libiberty/strsignal.c.old 2005-04-18 13:57:40.000000000 -0700 ++++ binutils-2.15/libiberty/strsignal.c 2005-04-18 13:59:09.000000000 -0700 +@@ -544,7 +544,7 @@ + + /* + +-@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) ++@deftypefn Supplemental void psignal (int @var{signo}, const char *@var{message}) + + Print @var{message} to the standard error, followed by a colon, + followed by the description of the signal specified by @var{signo}, +@@ -557,9 +557,7 @@ + #ifndef HAVE_PSIGNAL + + void +-psignal (signo, message) +- unsigned signo; +- char *message; ++psignal (int signo, const char *message) + { + if (signal_names == NULL) + { diff --git a/patches/binutils/2.16.1/120-binutils-skip-comments.patch b/patches/binutils/2.16.1/120-binutils-skip-comments.patch new file mode 100644 index 00000000..0ca9a471 --- /dev/null +++ b/patches/binutils/2.16.1/120-binutils-skip-comments.patch @@ -0,0 +1,95 @@ +[removed first hunk so it would apply to 2.16.1 - copyright date already updated - dank] + +Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html +Fixes +localealias.s:544: Error: junk at end of line, first unrecognized character is `,' +when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3 + +Paths adjusted to match crosstool's patcher. + +Message-Id: m3n052qw2g.fsf@whitebox.m5r.de +From: Andreas Schwab +To: Nathan Sidwell +Cc: Ian Lance Taylor , binutils at sources dot redhat dot com +Date: Fri, 23 Apr 2004 22:27:19 +0200 +Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line + +Nathan Sidwell writes: + +> Index: read.c +> =================================================================== +> RCS file: /cvs/src/src/gas/read.c,v +> retrieving revision 1.76 +> diff -c -3 -p -r1.76 read.c +> *** read.c 12 Mar 2004 17:48:12 -0000 1.76 +> --- read.c 18 Mar 2004 09:56:05 -0000 +> *************** read_a_source_file (char *name) +> *** 1053,1059 **** +> #endif +> input_line_pointer--; +> /* Report unknown char as ignored. */ +> ! ignore_rest_of_line (); +> } +> +> #ifdef md_after_pass_hook +> --- 1053,1059 ---- +> #endif +> input_line_pointer--; +> /* Report unknown char as ignored. */ +> ! demand_empty_rest_of_line (); +> } +> +> #ifdef md_after_pass_hook + +This means that the unknown character is no longer ignored, despite the +comment. As a side effect a line starting with a line comment character +not followed by APP in NO_APP mode now triggers an error instead of just a +warning, breaking builds of glibc on m68k-linux. Earlier in +read_a_source_file where #APP is handled there is another comment that +claims that unknown comments are ignored, when in fact they aren't (only +the initial line comment character is skipped). + +Note that the presence of #APP will mess up the line counters, but +that appears to be difficult to fix. + +Andreas. + +2004-04-23 Andreas Schwab + + * read.c (read_a_source_file): Ignore unknown text after line + comment character. Fix misleading comment. + +--- binutils/gas/read.c.~1.78.~ 2004-04-23 08:58:23.000000000 +0200 ++++ binutils/gas/read.c 2004-04-23 21:49:01.000000000 +0200 +@@ -950,10 +950,14 @@ read_a_source_file (char *name) + unsigned int new_length; + char *tmp_buf = 0; + +- bump_line_counters (); + s = input_line_pointer; + if (strncmp (s, "APP\n", 4)) +- continue; /* We ignore it */ ++ { ++ /* We ignore it */ ++ ignore_rest_of_line (); ++ continue; ++ } ++ bump_line_counters (); + s += 4; + + sb_new (&sbuf); +@@ -1052,7 +1056,7 @@ read_a_source_file (char *name) + continue; + #endif + input_line_pointer--; +- /* Report unknown char as ignored. */ ++ /* Report unknown char as error. */ + demand_empty_rest_of_line (); + } + + +-- +Andreas Schwab, SuSE Labs, schwab@suse.de +SuSE Linux AG, MaxfeldstraÃe 5, 90409 NÃrnberg, Germany +Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 +"And now for something completely different." diff --git a/patches/binutils/2.16.1/130-callahan.patch b/patches/binutils/2.16.1/130-callahan.patch new file mode 100644 index 00000000..a39050f9 --- /dev/null +++ b/patches/binutils/2.16.1/130-callahan.patch @@ -0,0 +1,693 @@ +Signed-off-by: dank@kegel.com +Fixes ld speed issue. +See http://weblogs.mozillazine.org/roc/archives/2005/02/optimizing_gnu.html +See thread "Re: optimizations for 3x speedup in ld", +http://sources.redhat.com/ml/binutils/2005-03/msg00847.html + +Wildcard section matching enhancement, backported from the binutils CVS tree. +Here's the CVS log comment from the original change to ldlang.c: + +revision 1.177 +date: 2005/04/06 15:33:02; author: jakub; state: Exp; lines: +438 -51 +2005-04-06 Jakub Jelinek + + * ldlang.c: Formatting. + (walk_wild_consider_section): Remember return value from wildcardp. + (is_simple_wild): Use strcspn instead of 2 strpbrk calls and strlen. + (wild_spec_can_overlap): Use strcspn instead of strpbrk and strlen. + +2005-04-06 Robert O'Callahan + + * ld.h (lean_section_userdata_type): Remove. + (fat_section_userdata_type): Remove file field. + (SECTION_USERDATA_SIZE): Remove. + * ldlang.c (init_os): Eliminate initialization of unused + lean_section_userdata_type. + + * ldlang.h (callback_t, walk_wild_section_handler_t): New + typedefs. + (struct lang_wild_statement_struct): Add walk_wild_section_handler + and handler_data fields. + * ldlang.c (callback_t): Removed. + (walk_wild_consider_section, walk_wild_section_general, + section_iterator_callback, find_section, is_simple_wild, + match_simple_wild, walk_wild_section_specs1_wild0, + walk_wild_section_specs1_wild1, walk_wild_section_specs2_wild1, + walk_wild_section_specs3_wild2, walk_wild_section_specs4_wild2, + wild_spec_can_overlap, analyze_walk_wild_section_handler): New + functions. + (lang_add_wild): Call analyze_walk_wild_section_handler. + (walk_wild_section): Renamed to walk_wild_section_general and + created a wrapper function. + (section_iterator_callback_data): New typedef. + + +Index: src/ld/ld.h +=================================================================== +RCS file: /cvs/src/src/ld/ld.h,v +retrieving revision 1.26 +retrieving revision 1.27 +diff -u -r1.26 -r1.27 +--- binutils/ld/ld.h.old 16 Mar 2005 21:52:42 -0000 1.26 ++++ binutils/ld/ld.h 6 Apr 2005 15:33:02 -0000 1.27 +@@ -1,6 +1,6 @@ + /* ld.h -- general linker header file + Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +- 2001, 2002, 2003, 2004 ++ 2001, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. + + This file is part of GLD, the Gnu Linker. +@@ -89,28 +89,15 @@ + struct map_symbol_def *next; + }; + +-/* Extra information we hold on sections */ +-typedef struct lean_user_section_struct { +- /* For output sections: pointer to the section where this data will go. */ +- struct lang_input_statement_struct *file; +-} lean_section_userdata_type; +- + /* The initial part of fat_user_section_struct has to be idential with + lean_user_section_struct. */ + typedef struct fat_user_section_struct { +- /* For output sections: pointer to the section where this data will go. */ +- struct lang_input_statement_struct *file; + /* For input sections, when writing a map file: head / tail of a linked + list of hash table entries for symbols defined in this section. */ + struct map_symbol_def *map_symbol_def_head; + struct map_symbol_def **map_symbol_def_tail; + } fat_section_userdata_type; + +-#define SECTION_USERDATA_SIZE \ +- (command_line.reduce_memory_overheads \ +- ? sizeof (lean_section_userdata_type) \ +- : sizeof (fat_section_userdata_type)) +- + #define get_userdata(x) ((x)->userdata) + + #define BYTE_SIZE (1) +Index: src/ld/ldlang.c +=================================================================== +RCS file: /cvs/src/src/ld/ldlang.c,v +retrieving revision 1.176 +retrieving revision 1.177 +diff -u -r1.176 -r1.177 +--- binutils/ld/ldlang.c.old 18 Mar 2005 13:56:26 -0000 1.176 ++++ binutils/ld/ldlang.c 6 Apr 2005 15:33:02 -0000 1.177 +@@ -84,9 +84,6 @@ + static void lang_record_phdrs (void); + static void lang_do_version_exports_section (void); + +-typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, +- asection *, lang_input_statement_type *, void *); +- + /* Exported variables. */ + lang_output_section_statement_type *abs_output_section; + lang_statement_list_type lang_output_section_statement; +@@ -155,21 +152,71 @@ + + /* Generic traversal routines for finding matching sections. */ + ++/* Try processing a section against a wildcard. This just calls ++ the callback unless the filename exclusion list is present ++ and excludes the file. It's hardly ever present so this ++ function is very fast. */ ++ ++static void ++walk_wild_consider_section (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ asection *s, ++ struct wildcard_list *sec, ++ callback_t callback, ++ void *data) ++{ ++ bfd_boolean skip = FALSE; ++ struct name_list *list_tmp; ++ ++ /* Don't process sections from files which were ++ excluded. */ ++ for (list_tmp = sec->spec.exclude_name_list; ++ list_tmp; ++ list_tmp = list_tmp->next) ++ { ++ bfd_boolean is_wildcard = wildcardp (list_tmp->name); ++ if (is_wildcard) ++ skip = fnmatch (list_tmp->name, file->filename, 0) == 0; ++ else ++ skip = strcmp (list_tmp->name, file->filename) == 0; ++ ++ /* If this file is part of an archive, and the archive is ++ excluded, exclude this file. */ ++ if (! skip && file->the_bfd != NULL ++ && file->the_bfd->my_archive != NULL ++ && file->the_bfd->my_archive->filename != NULL) ++ { ++ if (is_wildcard) ++ skip = fnmatch (list_tmp->name, ++ file->the_bfd->my_archive->filename, ++ 0) == 0; ++ else ++ skip = strcmp (list_tmp->name, ++ file->the_bfd->my_archive->filename) == 0; ++ } ++ ++ if (skip) ++ break; ++ } ++ ++ if (!skip) ++ (*callback) (ptr, sec, s, file, data); ++} ++ ++/* Lowest common denominator routine that can handle everything correctly, ++ but slowly. */ ++ + static void +-walk_wild_section (lang_wild_statement_type *ptr, +- lang_input_statement_type *file, +- callback_t callback, +- void *data) ++walk_wild_section_general (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) + { + asection *s; +- +- if (file->just_syms_flag) +- return; ++ struct wildcard_list *sec; + + for (s = file->the_bfd->sections; s != NULL; s = s->next) + { +- struct wildcard_list *sec; +- + sec = ptr->section_list; + if (sec == NULL) + (*callback) (ptr, sec, s, file, data); +@@ -177,39 +224,8 @@ + while (sec != NULL) + { + bfd_boolean skip = FALSE; +- struct name_list *list_tmp; + +- /* Don't process sections from files which were +- excluded. */ +- for (list_tmp = sec->spec.exclude_name_list; +- list_tmp; +- list_tmp = list_tmp->next) +- { +- if (wildcardp (list_tmp->name)) +- skip = fnmatch (list_tmp->name, file->filename, 0) == 0; +- else +- skip = strcmp (list_tmp->name, file->filename) == 0; +- +- /* If this file is part of an archive, and the archive is +- excluded, exclude this file. */ +- if (! skip && file->the_bfd != NULL +- && file->the_bfd->my_archive != NULL +- && file->the_bfd->my_archive->filename != NULL) +- { +- if (wildcardp (list_tmp->name)) +- skip = fnmatch (list_tmp->name, +- file->the_bfd->my_archive->filename, +- 0) == 0; +- else +- skip = strcmp (list_tmp->name, +- file->the_bfd->my_archive->filename) == 0; +- } +- +- if (skip) +- break; +- } +- +- if (!skip && sec->spec.name != NULL) ++ if (sec->spec.name != NULL) + { + const char *sname = bfd_get_section_name (file->the_bfd, s); + +@@ -220,13 +236,381 @@ + } + + if (!skip) +- (*callback) (ptr, sec, s, file, data); ++ walk_wild_consider_section (ptr, file, s, sec, callback, data); + + sec = sec->next; + } + } + } + ++/* Routines to find a single section given its name. If there's more ++ than one section with that name, we report that. */ ++ ++typedef struct ++{ ++ asection *found_section; ++ bfd_boolean multiple_sections_found; ++} section_iterator_callback_data; ++ ++static bfd_boolean ++section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data) ++{ ++ section_iterator_callback_data *d = data; ++ ++ if (d->found_section != NULL) ++ { ++ d->multiple_sections_found = TRUE; ++ return TRUE; ++ } ++ ++ d->found_section = s; ++ return FALSE; ++} ++ ++static asection * ++find_section (lang_input_statement_type *file, ++ struct wildcard_list *sec, ++ bfd_boolean *multiple_sections_found) ++{ ++ section_iterator_callback_data cb_data = { NULL, FALSE }; ++ ++ bfd_get_section_by_name_if (file->the_bfd, sec->spec.name, ++ section_iterator_callback, &cb_data); ++ *multiple_sections_found = cb_data.multiple_sections_found; ++ return cb_data.found_section; ++} ++ ++/* Code for handling simple wildcards without going through fnmatch, ++ which can be expensive because of charset translations etc. */ ++ ++/* A simple wild is a literal string followed by a single '*', ++ where the literal part is at least 4 characters long. */ ++ ++static bfd_boolean ++is_simple_wild (const char *name) ++{ ++ size_t len = strcspn (name, "*?["); ++ return len >= 4 && name[len] == '*' && name[len + 1] == '\0'; ++} ++ ++static bfd_boolean ++match_simple_wild (const char *pattern, const char *name) ++{ ++ /* The first four characters of the pattern are guaranteed valid ++ non-wildcard characters. So we can go faster. */ ++ if (pattern[0] != name[0] || pattern[1] != name[1] ++ || pattern[2] != name[2] || pattern[3] != name[3]) ++ return FALSE; ++ ++ pattern += 4; ++ name += 4; ++ while (*pattern != '*') ++ if (*name++ != *pattern++) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* Specialized, optimized routines for handling different kinds of ++ wildcards */ ++ ++static void ++walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ /* We can just do a hash lookup for the section with the right name. ++ But if that lookup discovers more than one section with the name ++ (should be rare), we fall back to the general algorithm because ++ we would otherwise have to sort the sections to make sure they ++ get processed in the bfd's order. */ ++ bfd_boolean multiple_sections_found; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ walk_wild_section_general (ptr, file, callback, data); ++ else if (s0) ++ walk_wild_consider_section (ptr, file, s0, sec0, callback, data); ++} ++ ++static void ++walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *wildsec0 = ptr->handler_data[0]; ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec0, callback, data); ++ } ++} ++ ++static void ++walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *wildsec1 = ptr->handler_data[1]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ /* Note that if the section was not found, s0 is NULL and ++ we'll simply never succeed the s == s0 test below. */ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ /* Recall that in this code path, a section cannot satisfy more ++ than one spec, so if s == s0 then it cannot match ++ wildspec1. */ ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec1, callback, ++ data); ++ } ++ } ++} ++ ++static void ++walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *wildsec1 = ptr->handler_data[1]; ++ struct wildcard_list *wildsec2 = ptr->handler_data[2]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found); ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec1, callback, data); ++ else ++ { ++ skip = !match_simple_wild (wildsec2->spec.name, sname); ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec2, callback, ++ data); ++ } ++ } ++ } ++} ++ ++static void ++walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ asection *s; ++ struct wildcard_list *sec0 = ptr->handler_data[0]; ++ struct wildcard_list *sec1 = ptr->handler_data[1]; ++ struct wildcard_list *wildsec2 = ptr->handler_data[2]; ++ struct wildcard_list *wildsec3 = ptr->handler_data[3]; ++ bfd_boolean multiple_sections_found; ++ asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1; ++ ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ s1 = find_section (file, sec1, &multiple_sections_found); ++ if (multiple_sections_found) ++ { ++ walk_wild_section_general (ptr, file, callback, data); ++ return; ++ } ++ ++ for (s = file->the_bfd->sections; s != NULL; s = s->next) ++ { ++ if (s == s0) ++ walk_wild_consider_section (ptr, file, s, sec0, callback, data); ++ else ++ if (s == s1) ++ walk_wild_consider_section (ptr, file, s, sec1, callback, data); ++ else ++ { ++ const char *sname = bfd_get_section_name (file->the_bfd, s); ++ bfd_boolean skip = !match_simple_wild (wildsec2->spec.name, ++ sname); ++ ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec2, callback, ++ data); ++ else ++ { ++ skip = !match_simple_wild (wildsec3->spec.name, sname); ++ if (!skip) ++ walk_wild_consider_section (ptr, file, s, wildsec3, ++ callback, data); ++ } ++ } ++ } ++} ++ ++static void ++walk_wild_section (lang_wild_statement_type *ptr, ++ lang_input_statement_type *file, ++ callback_t callback, ++ void *data) ++{ ++ if (file->just_syms_flag) ++ return; ++ ++ (*ptr->walk_wild_section_handler) (ptr, file, callback, data); ++} ++ ++/* Returns TRUE when name1 is a wildcard spec that might match ++ something name2 can match. We're conservative: we return FALSE ++ only if the prefixes of name1 and name2 are different up to the ++ first wildcard character. */ ++ ++static bfd_boolean ++wild_spec_can_overlap (const char *name1, const char *name2) ++{ ++ size_t prefix1_len = strcspn (name1, "?*["); ++ size_t prefix2_len = strcspn (name2, "?*["); ++ size_t min_prefix_len; ++ ++ /* Note that if there is no wildcard character, then we treat the ++ terminating 0 as part of the prefix. Thus ".text" won't match ++ ".text." or ".text.*", for example. */ ++ if (name1[prefix1_len] == '\0') ++ prefix1_len++; ++ if (name2[prefix2_len] == '\0') ++ prefix2_len++; ++ ++ min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len; ++ ++ return memcmp (name1, name2, min_prefix_len) == 0; ++} ++ ++/* Select specialized code to handle various kinds of wildcard ++ statements. */ ++ ++static void ++analyze_walk_wild_section_handler (lang_wild_statement_type *ptr) ++{ ++ int sec_count = 0; ++ int wild_name_count = 0; ++ struct wildcard_list *sec; ++ int signature; ++ int data_counter; ++ ++ ptr->walk_wild_section_handler = walk_wild_section_general; ++ ++ /* Count how many wildcard_specs there are, and how many of those ++ actually use wildcards in the name. Also, bail out if any of the ++ wildcard names are NULL. (Can this actually happen? ++ walk_wild_section used to test for it.) And bail out if any ++ of the wildcards are more complex than a simple string ++ ending in a single '*'. */ ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ { ++ ++sec_count; ++ if (sec->spec.name == NULL) ++ return; ++ if (wildcardp (sec->spec.name)) ++ { ++ ++wild_name_count; ++ if (!is_simple_wild (sec->spec.name)) ++ return; ++ } ++ } ++ ++ /* The zero-spec case would be easy to optimize but it doesn't ++ happen in practice. Likewise, more than 4 specs doesn't ++ happen in practice. */ ++ if (sec_count == 0 || sec_count > 4) ++ return; ++ ++ /* Check that no two specs can match the same section. */ ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ { ++ struct wildcard_list *sec2; ++ for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next) ++ { ++ if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name)) ++ return; ++ } ++ } ++ ++ signature = (sec_count << 8) + wild_name_count; ++ switch (signature) ++ { ++ case 0x0100: ++ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0; ++ break; ++ case 0x0101: ++ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1; ++ break; ++ case 0x0201: ++ ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1; ++ break; ++ case 0x0302: ++ ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2; ++ break; ++ case 0x0402: ++ ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2; ++ break; ++ default: ++ return; ++ } ++ ++ /* Now fill the data array with pointers to the specs, first the ++ specs with non-wildcard names, then the specs with wildcard ++ names. It's OK to process the specs in different order from the ++ given order, because we've already determined that no section ++ will match more than one spec. */ ++ data_counter = 0; ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ if (!wildcardp (sec->spec.name)) ++ ptr->handler_data[data_counter++] = sec; ++ for (sec = ptr->section_list; sec != NULL; sec = sec->next) ++ if (wildcardp (sec->spec.name)) ++ ptr->handler_data[data_counter++] = sec; ++} ++ + /* Handle a wild statement for a single file F. */ + + static void +@@ -1175,17 +1559,12 @@ + static void + init_os (lang_output_section_statement_type *s) + { +- lean_section_userdata_type *new; +- + if (s->bfd_section != NULL) + return; + + if (strcmp (s->name, DISCARD_SECTION_NAME) == 0) + einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME); + +- new = stat_alloc (SECTION_USERDATA_SIZE); +- memset (new, 0, SECTION_USERDATA_SIZE); +- + s->bfd_section = bfd_get_section_by_name (output_bfd, s->name); + if (s->bfd_section == NULL) + s->bfd_section = bfd_make_section (output_bfd, s->name); +@@ -1199,7 +1578,14 @@ + /* We initialize an output sections output offset to minus its own + vma to allow us to output a section through itself. */ + s->bfd_section->output_offset = 0; +- get_userdata (s->bfd_section) = new; ++ if (!command_line.reduce_memory_overheads) ++ { ++ fat_section_userdata_type *new ++ = stat_alloc (sizeof (fat_section_userdata_type)); ++ memset (new, 0, sizeof (fat_section_userdata_type)); ++ get_userdata (s->bfd_section) = new; ++ } ++ + + /* If there is a base address, make sure that any sections it might + mention are initialized. */ +@@ -4939,6 +5325,7 @@ + new->section_list = section_list; + new->keep_sections = keep_sections; + lang_list_init (&new->children); ++ analyze_walk_wild_section_handler (new); + } + + void +Index: src/ld/ldlang.h +=================================================================== +RCS file: /cvs/src/src/ld/ldlang.h,v +retrieving revision 1.44 +retrieving revision 1.45 +diff -u -r1.44 -r1.45 +--- binutils/ld/ldlang.h.old 3 Mar 2005 11:51:58 -0000 1.44 ++++ binutils/ld/ldlang.h 6 Apr 2005 15:33:03 -0000 1.45 +@@ -298,7 +298,17 @@ + union lang_statement_union *file; + } lang_afile_asection_pair_statement_type; + +-typedef struct lang_wild_statement_struct ++typedef struct lang_wild_statement_struct lang_wild_statement_type; ++ ++typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, ++ asection *, lang_input_statement_type *, void *); ++ ++typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *, ++ lang_input_statement_type *, ++ callback_t callback, ++ void *data); ++ ++struct lang_wild_statement_struct + { + lang_statement_header_type header; + const char *filename; +@@ -306,7 +316,10 @@ + struct wildcard_list *section_list; + bfd_boolean keep_sections; + lang_statement_list_type children; +-} lang_wild_statement_type; ++ ++ walk_wild_section_handler_t walk_wild_section_handler; ++ struct wildcard_list *handler_data[4]; ++}; + + typedef struct lang_address_statement_struct + { diff --git a/patches/binutils/2.16.1/140-cross-gprof.patch b/patches/binutils/2.16.1/140-cross-gprof.patch new file mode 100644 index 00000000..ea6c18fd --- /dev/null +++ b/patches/binutils/2.16.1/140-cross-gprof.patch @@ -0,0 +1,22 @@ +--- binutils-2.15/configure.old 2004-07-21 21:36:47.000000000 -0700 ++++ binutils-2.15/configure 2004-07-21 21:37:08.000000000 -0700 +@@ -999,7 +999,7 @@ + + # Some tools are only suitable for building in a "native" situation. + # Remove these if host!=target. +-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" ++native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" + + # Similarly, some are only suitable for cross toolchains. + # Remove these if host=target. +--- binutils-2.15/configure.in.old 2004-07-21 21:37:19.000000000 -0700 ++++ binutils-2.15/configure.in 2004-07-21 21:37:34.000000000 -0700 +@@ -236,7 +236,7 @@ + + # Some tools are only suitable for building in a "native" situation. + # Remove these if host!=target. +-native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" ++native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" + + # Similarly, some are only suitable for cross toolchains. + # Remove these if host=target. diff --git a/patches/binutils/2.16.1/150-stabs-tweak.patch b/patches/binutils/2.16.1/150-stabs-tweak.patch new file mode 100644 index 00000000..86e36114 --- /dev/null +++ b/patches/binutils/2.16.1/150-stabs-tweak.patch @@ -0,0 +1,28 @@ +Signed-off-by: dank@kegel.com + +See http://sourceware.org/ml/binutils/2005-12/msg00270.html +http://sourceware.org/ml/binutils-cvs/2005-12/msg00139.html + +STABS hash table size change, backported from the binutils CVS tree. Here's +the CVS log comment for the original change: + +revision 1.25 +date: 2005/12/29 10:29:23; author: nickc; state: Exp; lines: +2 -3 +(_bfd_link_section_stabs): Use bfd_hash_table_init rather than +bfd_hash_table_init_n(...,251) so that the size of the hash table can be +controlled by the user. + +--- binutils/bfd/stabs.c.old 4 May 2005 15:53:39 -0000 1.24 ++++ binutils/bfd/stabs.c 29 Dec 2005 10:29:23 -0000 1.25 +@@ -194,9 +194,8 @@ + goto error_return; + /* Make sure the first byte is zero. */ + (void) _bfd_stringtab_add (sinfo->strings, "", TRUE, TRUE); +- if (! bfd_hash_table_init_n (&sinfo->includes, +- stab_link_includes_newfunc, +- 251)) ++ if (! bfd_hash_table_init (&sinfo->includes, ++ stab_link_includes_newfunc)) + goto error_return; + sinfo->stabstr = bfd_make_section_anyway (abfd, ".stabstr"); + if (sinfo->stabstr == NULL) diff --git a/patches/binutils/2.16.1/bfd-hash-tweak.patch b/patches/binutils/2.16.1/bfd-hash-tweak.patch deleted file mode 100644 index c6de93a9..00000000 --- a/patches/binutils/2.16.1/bfd-hash-tweak.patch +++ /dev/null @@ -1,23 +0,0 @@ -Signed-off-by: dank@kegel.com - -Raising the size of the hash table is a noticable win when linking -at least one large app. - -There was a patch, -http://sources.redhat.com/ml/binutils/2004-06/msg00165.html -to do this dynamically. No idea why that didn't make it in. -So this tiny change to raise the default size is just -a stopgap for now. - - ---- binutils-2.16.1/bfd/hash.c.old 2006-03-02 23:01:39.000000000 -0800 -+++ binutils-2.16.1/bfd/hash.c 2006-03-02 23:01:58.000000000 -0800 -@@ -300,7 +300,7 @@ - */ - - /* The default number of entries to use when creating a hash table. */ --#define DEFAULT_SIZE 4051 -+#define DEFAULT_SIZE 32749 - static size_t bfd_default_hash_table_size = DEFAULT_SIZE; - - /* Create a new hash table, given a number of entries. */ diff --git a/patches/binutils/2.16.1/binutils-2.15-psignal.patch b/patches/binutils/2.16.1/binutils-2.15-psignal.patch deleted file mode 100644 index 98fa600e..00000000 --- a/patches/binutils/2.16.1/binutils-2.15-psignal.patch +++ /dev/null @@ -1,40 +0,0 @@ -Make psignal prototype in libiberty match that in glibc. - -Fixes: - -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c: In function `psignal': -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `signo' doesn't match prototype -/usr/include/signal.h:131: prototype declaration -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:563: argument `message' doesn't match prototype -/usr/include/signal.h:131: prototype declaration -gcc-2.95.3-glibc-2.1.3/binutils-2.15/libiberty/strsignal.c:568: warning: comparison between signed and unsigned -mprotect... make[1]: *** [strsignal.o] Error 1 -make[1]: Leaving directory `/export/hda3/dkegel/queue/jobdir.produser_cpsm17/crosstool-0.32/build/i686-unknown-linux-gnu/gcc-2.95.3-glibc-2.1.3/build-binutils/libiberty' -make: *** [all-libiberty] Error 2 - -when building on red hat 7.1 -though it's a bit of a mystery why libiberty's psignal is being compiled at -all, since red hat 7.1's glibc supports psignal (hence the error message) - ---- binutils-2.15/libiberty/strsignal.c.old 2005-04-18 13:57:40.000000000 -0700 -+++ binutils-2.15/libiberty/strsignal.c 2005-04-18 13:59:09.000000000 -0700 -@@ -544,7 +544,7 @@ - - /* - --@deftypefn Supplemental void psignal (unsigned @var{signo}, char *@var{message}) -+@deftypefn Supplemental void psignal (int @var{signo}, const char *@var{message}) - - Print @var{message} to the standard error, followed by a colon, - followed by the description of the signal specified by @var{signo}, -@@ -557,9 +557,7 @@ - #ifndef HAVE_PSIGNAL - - void --psignal (signo, message) -- unsigned signo; -- char *message; -+psignal (int signo, const char *message) - { - if (signal_names == NULL) - { diff --git a/patches/binutils/2.16.1/binutils-skip-comments.patch b/patches/binutils/2.16.1/binutils-skip-comments.patch deleted file mode 100644 index 0ca9a471..00000000 --- a/patches/binutils/2.16.1/binutils-skip-comments.patch +++ /dev/null @@ -1,95 +0,0 @@ -[removed first hunk so it would apply to 2.16.1 - copyright date already updated - dank] - -Retrieved from http://sources.redhat.com/ml/binutils/2004-04/msg00646.html -Fixes -localealias.s:544: Error: junk at end of line, first unrecognized character is `,' -when building glibc-2.3.2 with gcc-3.4.0 and binutils-2.15.90.0.3 - -Paths adjusted to match crosstool's patcher. - -Message-Id: m3n052qw2g.fsf@whitebox.m5r.de -From: Andreas Schwab -To: Nathan Sidwell -Cc: Ian Lance Taylor , binutils at sources dot redhat dot com -Date: Fri, 23 Apr 2004 22:27:19 +0200 -Subject: Re: demand_empty_rest_of_line and ignore_rest_of_line - -Nathan Sidwell writes: - -> Index: read.c -> =================================================================== -> RCS file: /cvs/src/src/gas/read.c,v -> retrieving revision 1.76 -> diff -c -3 -p -r1.76 read.c -> *** read.c 12 Mar 2004 17:48:12 -0000 1.76 -> --- read.c 18 Mar 2004 09:56:05 -0000 -> *************** read_a_source_file (char *name) -> *** 1053,1059 **** -> #endif -> input_line_pointer--; -> /* Report unknown char as ignored. */ -> ! ignore_rest_of_line (); -> } -> -> #ifdef md_after_pass_hook -> --- 1053,1059 ---- -> #endif -> input_line_pointer--; -> /* Report unknown char as ignored. */ -> ! demand_empty_rest_of_line (); -> } -> -> #ifdef md_after_pass_hook - -This means that the unknown character is no longer ignored, despite the -comment. As a side effect a line starting with a line comment character -not followed by APP in NO_APP mode now triggers an error instead of just a -warning, breaking builds of glibc on m68k-linux. Earlier in -read_a_source_file where #APP is handled there is another comment that -claims that unknown comments are ignored, when in fact they aren't (only -the initial line comment character is skipped). - -Note that the presence of #APP will mess up the line counters, but -that appears to be difficult to fix. - -Andreas. - -2004-04-23 Andreas Schwab - - * read.c (read_a_source_file): Ignore unknown text after line - comment character. Fix misleading comment. - ---- binutils/gas/read.c.~1.78.~ 2004-04-23 08:58:23.000000000 +0200 -+++ binutils/gas/read.c 2004-04-23 21:49:01.000000000 +0200 -@@ -950,10 +950,14 @@ read_a_source_file (char *name) - unsigned int new_length; - char *tmp_buf = 0; - -- bump_line_counters (); - s = input_line_pointer; - if (strncmp (s, "APP\n", 4)) -- continue; /* We ignore it */ -+ { -+ /* We ignore it */ -+ ignore_rest_of_line (); -+ continue; -+ } -+ bump_line_counters (); - s += 4; - - sb_new (&sbuf); -@@ -1052,7 +1056,7 @@ read_a_source_file (char *name) - continue; - #endif - input_line_pointer--; -- /* Report unknown char as ignored. */ -+ /* Report unknown char as error. */ - demand_empty_rest_of_line (); - } - - --- -Andreas Schwab, SuSE Labs, schwab@suse.de -SuSE Linux AG, MaxfeldstraÃe 5, 90409 NÃrnberg, Germany -Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 -"And now for something completely different." diff --git a/patches/binutils/2.16.1/callahan.patch b/patches/binutils/2.16.1/callahan.patch deleted file mode 100644 index a39050f9..00000000 --- a/patches/binutils/2.16.1/callahan.patch +++ /dev/null @@ -1,693 +0,0 @@ -Signed-off-by: dank@kegel.com -Fixes ld speed issue. -See http://weblogs.mozillazine.org/roc/archives/2005/02/optimizing_gnu.html -See thread "Re: optimizations for 3x speedup in ld", -http://sources.redhat.com/ml/binutils/2005-03/msg00847.html - -Wildcard section matching enhancement, backported from the binutils CVS tree. -Here's the CVS log comment from the original change to ldlang.c: - -revision 1.177 -date: 2005/04/06 15:33:02; author: jakub; state: Exp; lines: +438 -51 -2005-04-06 Jakub Jelinek - - * ldlang.c: Formatting. - (walk_wild_consider_section): Remember return value from wildcardp. - (is_simple_wild): Use strcspn instead of 2 strpbrk calls and strlen. - (wild_spec_can_overlap): Use strcspn instead of strpbrk and strlen. - -2005-04-06 Robert O'Callahan - - * ld.h (lean_section_userdata_type): Remove. - (fat_section_userdata_type): Remove file field. - (SECTION_USERDATA_SIZE): Remove. - * ldlang.c (init_os): Eliminate initialization of unused - lean_section_userdata_type. - - * ldlang.h (callback_t, walk_wild_section_handler_t): New - typedefs. - (struct lang_wild_statement_struct): Add walk_wild_section_handler - and handler_data fields. - * ldlang.c (callback_t): Removed. - (walk_wild_consider_section, walk_wild_section_general, - section_iterator_callback, find_section, is_simple_wild, - match_simple_wild, walk_wild_section_specs1_wild0, - walk_wild_section_specs1_wild1, walk_wild_section_specs2_wild1, - walk_wild_section_specs3_wild2, walk_wild_section_specs4_wild2, - wild_spec_can_overlap, analyze_walk_wild_section_handler): New - functions. - (lang_add_wild): Call analyze_walk_wild_section_handler. - (walk_wild_section): Renamed to walk_wild_section_general and - created a wrapper function. - (section_iterator_callback_data): New typedef. - - -Index: src/ld/ld.h -=================================================================== -RCS file: /cvs/src/src/ld/ld.h,v -retrieving revision 1.26 -retrieving revision 1.27 -diff -u -r1.26 -r1.27 ---- binutils/ld/ld.h.old 16 Mar 2005 21:52:42 -0000 1.26 -+++ binutils/ld/ld.h 6 Apr 2005 15:33:02 -0000 1.27 -@@ -1,6 +1,6 @@ - /* ld.h -- general linker header file - Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -- 2001, 2002, 2003, 2004 -+ 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. - - This file is part of GLD, the Gnu Linker. -@@ -89,28 +89,15 @@ - struct map_symbol_def *next; - }; - --/* Extra information we hold on sections */ --typedef struct lean_user_section_struct { -- /* For output sections: pointer to the section where this data will go. */ -- struct lang_input_statement_struct *file; --} lean_section_userdata_type; -- - /* The initial part of fat_user_section_struct has to be idential with - lean_user_section_struct. */ - typedef struct fat_user_section_struct { -- /* For output sections: pointer to the section where this data will go. */ -- struct lang_input_statement_struct *file; - /* For input sections, when writing a map file: head / tail of a linked - list of hash table entries for symbols defined in this section. */ - struct map_symbol_def *map_symbol_def_head; - struct map_symbol_def **map_symbol_def_tail; - } fat_section_userdata_type; - --#define SECTION_USERDATA_SIZE \ -- (command_line.reduce_memory_overheads \ -- ? sizeof (lean_section_userdata_type) \ -- : sizeof (fat_section_userdata_type)) -- - #define get_userdata(x) ((x)->userdata) - - #define BYTE_SIZE (1) -Index: src/ld/ldlang.c -=================================================================== -RCS file: /cvs/src/src/ld/ldlang.c,v -retrieving revision 1.176 -retrieving revision 1.177 -diff -u -r1.176 -r1.177 ---- binutils/ld/ldlang.c.old 18 Mar 2005 13:56:26 -0000 1.176 -+++ binutils/ld/ldlang.c 6 Apr 2005 15:33:02 -0000 1.177 -@@ -84,9 +84,6 @@ - static void lang_record_phdrs (void); - static void lang_do_version_exports_section (void); - --typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, -- asection *, lang_input_statement_type *, void *); -- - /* Exported variables. */ - lang_output_section_statement_type *abs_output_section; - lang_statement_list_type lang_output_section_statement; -@@ -155,21 +152,71 @@ - - /* Generic traversal routines for finding matching sections. */ - -+/* Try processing a section against a wildcard. This just calls -+ the callback unless the filename exclusion list is present -+ and excludes the file. It's hardly ever present so this -+ function is very fast. */ -+ -+static void -+walk_wild_consider_section (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ asection *s, -+ struct wildcard_list *sec, -+ callback_t callback, -+ void *data) -+{ -+ bfd_boolean skip = FALSE; -+ struct name_list *list_tmp; -+ -+ /* Don't process sections from files which were -+ excluded. */ -+ for (list_tmp = sec->spec.exclude_name_list; -+ list_tmp; -+ list_tmp = list_tmp->next) -+ { -+ bfd_boolean is_wildcard = wildcardp (list_tmp->name); -+ if (is_wildcard) -+ skip = fnmatch (list_tmp->name, file->filename, 0) == 0; -+ else -+ skip = strcmp (list_tmp->name, file->filename) == 0; -+ -+ /* If this file is part of an archive, and the archive is -+ excluded, exclude this file. */ -+ if (! skip && file->the_bfd != NULL -+ && file->the_bfd->my_archive != NULL -+ && file->the_bfd->my_archive->filename != NULL) -+ { -+ if (is_wildcard) -+ skip = fnmatch (list_tmp->name, -+ file->the_bfd->my_archive->filename, -+ 0) == 0; -+ else -+ skip = strcmp (list_tmp->name, -+ file->the_bfd->my_archive->filename) == 0; -+ } -+ -+ if (skip) -+ break; -+ } -+ -+ if (!skip) -+ (*callback) (ptr, sec, s, file, data); -+} -+ -+/* Lowest common denominator routine that can handle everything correctly, -+ but slowly. */ -+ - static void --walk_wild_section (lang_wild_statement_type *ptr, -- lang_input_statement_type *file, -- callback_t callback, -- void *data) -+walk_wild_section_general (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) - { - asection *s; -- -- if (file->just_syms_flag) -- return; -+ struct wildcard_list *sec; - - for (s = file->the_bfd->sections; s != NULL; s = s->next) - { -- struct wildcard_list *sec; -- - sec = ptr->section_list; - if (sec == NULL) - (*callback) (ptr, sec, s, file, data); -@@ -177,39 +224,8 @@ - while (sec != NULL) - { - bfd_boolean skip = FALSE; -- struct name_list *list_tmp; - -- /* Don't process sections from files which were -- excluded. */ -- for (list_tmp = sec->spec.exclude_name_list; -- list_tmp; -- list_tmp = list_tmp->next) -- { -- if (wildcardp (list_tmp->name)) -- skip = fnmatch (list_tmp->name, file->filename, 0) == 0; -- else -- skip = strcmp (list_tmp->name, file->filename) == 0; -- -- /* If this file is part of an archive, and the archive is -- excluded, exclude this file. */ -- if (! skip && file->the_bfd != NULL -- && file->the_bfd->my_archive != NULL -- && file->the_bfd->my_archive->filename != NULL) -- { -- if (wildcardp (list_tmp->name)) -- skip = fnmatch (list_tmp->name, -- file->the_bfd->my_archive->filename, -- 0) == 0; -- else -- skip = strcmp (list_tmp->name, -- file->the_bfd->my_archive->filename) == 0; -- } -- -- if (skip) -- break; -- } -- -- if (!skip && sec->spec.name != NULL) -+ if (sec->spec.name != NULL) - { - const char *sname = bfd_get_section_name (file->the_bfd, s); - -@@ -220,13 +236,381 @@ - } - - if (!skip) -- (*callback) (ptr, sec, s, file, data); -+ walk_wild_consider_section (ptr, file, s, sec, callback, data); - - sec = sec->next; - } - } - } - -+/* Routines to find a single section given its name. If there's more -+ than one section with that name, we report that. */ -+ -+typedef struct -+{ -+ asection *found_section; -+ bfd_boolean multiple_sections_found; -+} section_iterator_callback_data; -+ -+static bfd_boolean -+section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data) -+{ -+ section_iterator_callback_data *d = data; -+ -+ if (d->found_section != NULL) -+ { -+ d->multiple_sections_found = TRUE; -+ return TRUE; -+ } -+ -+ d->found_section = s; -+ return FALSE; -+} -+ -+static asection * -+find_section (lang_input_statement_type *file, -+ struct wildcard_list *sec, -+ bfd_boolean *multiple_sections_found) -+{ -+ section_iterator_callback_data cb_data = { NULL, FALSE }; -+ -+ bfd_get_section_by_name_if (file->the_bfd, sec->spec.name, -+ section_iterator_callback, &cb_data); -+ *multiple_sections_found = cb_data.multiple_sections_found; -+ return cb_data.found_section; -+} -+ -+/* Code for handling simple wildcards without going through fnmatch, -+ which can be expensive because of charset translations etc. */ -+ -+/* A simple wild is a literal string followed by a single '*', -+ where the literal part is at least 4 characters long. */ -+ -+static bfd_boolean -+is_simple_wild (const char *name) -+{ -+ size_t len = strcspn (name, "*?["); -+ return len >= 4 && name[len] == '*' && name[len + 1] == '\0'; -+} -+ -+static bfd_boolean -+match_simple_wild (const char *pattern, const char *name) -+{ -+ /* The first four characters of the pattern are guaranteed valid -+ non-wildcard characters. So we can go faster. */ -+ if (pattern[0] != name[0] || pattern[1] != name[1] -+ || pattern[2] != name[2] || pattern[3] != name[3]) -+ return FALSE; -+ -+ pattern += 4; -+ name += 4; -+ while (*pattern != '*') -+ if (*name++ != *pattern++) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+/* Specialized, optimized routines for handling different kinds of -+ wildcards */ -+ -+static void -+walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ /* We can just do a hash lookup for the section with the right name. -+ But if that lookup discovers more than one section with the name -+ (should be rare), we fall back to the general algorithm because -+ we would otherwise have to sort the sections to make sure they -+ get processed in the bfd's order. */ -+ bfd_boolean multiple_sections_found; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ walk_wild_section_general (ptr, file, callback, data); -+ else if (s0) -+ walk_wild_consider_section (ptr, file, s0, sec0, callback, data); -+} -+ -+static void -+walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *wildsec0 = ptr->handler_data[0]; -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec0, callback, data); -+ } -+} -+ -+static void -+walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *wildsec1 = ptr->handler_data[1]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ /* Note that if the section was not found, s0 is NULL and -+ we'll simply never succeed the s == s0 test below. */ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ /* Recall that in this code path, a section cannot satisfy more -+ than one spec, so if s == s0 then it cannot match -+ wildspec1. */ -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec1, callback, -+ data); -+ } -+ } -+} -+ -+static void -+walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *wildsec1 = ptr->handler_data[1]; -+ struct wildcard_list *wildsec2 = ptr->handler_data[2]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found); -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec1, callback, data); -+ else -+ { -+ skip = !match_simple_wild (wildsec2->spec.name, sname); -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec2, callback, -+ data); -+ } -+ } -+ } -+} -+ -+static void -+walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ asection *s; -+ struct wildcard_list *sec0 = ptr->handler_data[0]; -+ struct wildcard_list *sec1 = ptr->handler_data[1]; -+ struct wildcard_list *wildsec2 = ptr->handler_data[2]; -+ struct wildcard_list *wildsec3 = ptr->handler_data[3]; -+ bfd_boolean multiple_sections_found; -+ asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1; -+ -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ s1 = find_section (file, sec1, &multiple_sections_found); -+ if (multiple_sections_found) -+ { -+ walk_wild_section_general (ptr, file, callback, data); -+ return; -+ } -+ -+ for (s = file->the_bfd->sections; s != NULL; s = s->next) -+ { -+ if (s == s0) -+ walk_wild_consider_section (ptr, file, s, sec0, callback, data); -+ else -+ if (s == s1) -+ walk_wild_consider_section (ptr, file, s, sec1, callback, data); -+ else -+ { -+ const char *sname = bfd_get_section_name (file->the_bfd, s); -+ bfd_boolean skip = !match_simple_wild (wildsec2->spec.name, -+ sname); -+ -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec2, callback, -+ data); -+ else -+ { -+ skip = !match_simple_wild (wildsec3->spec.name, sname); -+ if (!skip) -+ walk_wild_consider_section (ptr, file, s, wildsec3, -+ callback, data); -+ } -+ } -+ } -+} -+ -+static void -+walk_wild_section (lang_wild_statement_type *ptr, -+ lang_input_statement_type *file, -+ callback_t callback, -+ void *data) -+{ -+ if (file->just_syms_flag) -+ return; -+ -+ (*ptr->walk_wild_section_handler) (ptr, file, callback, data); -+} -+ -+/* Returns TRUE when name1 is a wildcard spec that might match -+ something name2 can match. We're conservative: we return FALSE -+ only if the prefixes of name1 and name2 are different up to the -+ first wildcard character. */ -+ -+static bfd_boolean -+wild_spec_can_overlap (const char *name1, const char *name2) -+{ -+ size_t prefix1_len = strcspn (name1, "?*["); -+ size_t prefix2_len = strcspn (name2, "?*["); -+ size_t min_prefix_len; -+ -+ /* Note that if there is no wildcard character, then we treat the -+ terminating 0 as part of the prefix. Thus ".text" won't match -+ ".text." or ".text.*", for example. */ -+ if (name1[prefix1_len] == '\0') -+ prefix1_len++; -+ if (name2[prefix2_len] == '\0') -+ prefix2_len++; -+ -+ min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len; -+ -+ return memcmp (name1, name2, min_prefix_len) == 0; -+} -+ -+/* Select specialized code to handle various kinds of wildcard -+ statements. */ -+ -+static void -+analyze_walk_wild_section_handler (lang_wild_statement_type *ptr) -+{ -+ int sec_count = 0; -+ int wild_name_count = 0; -+ struct wildcard_list *sec; -+ int signature; -+ int data_counter; -+ -+ ptr->walk_wild_section_handler = walk_wild_section_general; -+ -+ /* Count how many wildcard_specs there are, and how many of those -+ actually use wildcards in the name. Also, bail out if any of the -+ wildcard names are NULL. (Can this actually happen? -+ walk_wild_section used to test for it.) And bail out if any -+ of the wildcards are more complex than a simple string -+ ending in a single '*'. */ -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ { -+ ++sec_count; -+ if (sec->spec.name == NULL) -+ return; -+ if (wildcardp (sec->spec.name)) -+ { -+ ++wild_name_count; -+ if (!is_simple_wild (sec->spec.name)) -+ return; -+ } -+ } -+ -+ /* The zero-spec case would be easy to optimize but it doesn't -+ happen in practice. Likewise, more than 4 specs doesn't -+ happen in practice. */ -+ if (sec_count == 0 || sec_count > 4) -+ return; -+ -+ /* Check that no two specs can match the same section. */ -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ { -+ struct wildcard_list *sec2; -+ for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next) -+ { -+ if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name)) -+ return; -+ } -+ } -+ -+ signature = (sec_count << 8) + wild_name_count; -+ switch (signature) -+ { -+ case 0x0100: -+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0; -+ break; -+ case 0x0101: -+ ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1; -+ break; -+ case 0x0201: -+ ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1; -+ break; -+ case 0x0302: -+ ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2; -+ break; -+ case 0x0402: -+ ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2; -+ break; -+ default: -+ return; -+ } -+ -+ /* Now fill the data array with pointers to the specs, first the -+ specs with non-wildcard names, then the specs with wildcard -+ names. It's OK to process the specs in different order from the -+ given order, because we've already determined that no section -+ will match more than one spec. */ -+ data_counter = 0; -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ if (!wildcardp (sec->spec.name)) -+ ptr->handler_data[data_counter++] = sec; -+ for (sec = ptr->section_list; sec != NULL; sec = sec->next) -+ if (wildcardp (sec->spec.name)) -+ ptr->handler_data[data_counter++] = sec; -+} -+ - /* Handle a wild statement for a single file F. */ - - static void -@@ -1175,17 +1559,12 @@ - static void - init_os (lang_output_section_statement_type *s) - { -- lean_section_userdata_type *new; -- - if (s->bfd_section != NULL) - return; - - if (strcmp (s->name, DISCARD_SECTION_NAME) == 0) - einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME); - -- new = stat_alloc (SECTION_USERDATA_SIZE); -- memset (new, 0, SECTION_USERDATA_SIZE); -- - s->bfd_section = bfd_get_section_by_name (output_bfd, s->name); - if (s->bfd_section == NULL) - s->bfd_section = bfd_make_section (output_bfd, s->name); -@@ -1199,7 +1578,14 @@ - /* We initialize an output sections output offset to minus its own - vma to allow us to output a section through itself. */ - s->bfd_section->output_offset = 0; -- get_userdata (s->bfd_section) = new; -+ if (!command_line.reduce_memory_overheads) -+ { -+ fat_section_userdata_type *new -+ = stat_alloc (sizeof (fat_section_userdata_type)); -+ memset (new, 0, sizeof (fat_section_userdata_type)); -+ get_userdata (s->bfd_section) = new; -+ } -+ - - /* If there is a base address, make sure that any sections it might - mention are initialized. */ -@@ -4939,6 +5325,7 @@ - new->section_list = section_list; - new->keep_sections = keep_sections; - lang_list_init (&new->children); -+ analyze_walk_wild_section_handler (new); - } - - void -Index: src/ld/ldlang.h -=================================================================== -RCS file: /cvs/src/src/ld/ldlang.h,v -retrieving revision 1.44 -retrieving revision 1.45 -diff -u -r1.44 -r1.45 ---- binutils/ld/ldlang.h.old 3 Mar 2005 11:51:58 -0000 1.44 -+++ binutils/ld/ldlang.h 6 Apr 2005 15:33:03 -0000 1.45 -@@ -298,7 +298,17 @@ - union lang_statement_union *file; - } lang_afile_asection_pair_statement_type; - --typedef struct lang_wild_statement_struct -+typedef struct lang_wild_statement_struct lang_wild_statement_type; -+ -+typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *, -+ asection *, lang_input_statement_type *, void *); -+ -+typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *, -+ lang_input_statement_type *, -+ callback_t callback, -+ void *data); -+ -+struct lang_wild_statement_struct - { - lang_statement_header_type header; - const char *filename; -@@ -306,7 +316,10 @@ - struct wildcard_list *section_list; - bfd_boolean keep_sections; - lang_statement_list_type children; --} lang_wild_statement_type; -+ -+ walk_wild_section_handler_t walk_wild_section_handler; -+ struct wildcard_list *handler_data[4]; -+}; - - typedef struct lang_address_statement_struct - { diff --git a/patches/binutils/2.16.1/cross-gprof.patch b/patches/binutils/2.16.1/cross-gprof.patch deleted file mode 100644 index ea6c18fd..00000000 --- a/patches/binutils/2.16.1/cross-gprof.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- binutils-2.15/configure.old 2004-07-21 21:36:47.000000000 -0700 -+++ binutils-2.15/configure 2004-07-21 21:37:08.000000000 -0700 -@@ -999,7 +999,7 @@ - - # Some tools are only suitable for building in a "native" situation. - # Remove these if host!=target. --native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" -+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" - - # Similarly, some are only suitable for cross toolchains. - # Remove these if host=target. ---- binutils-2.15/configure.in.old 2004-07-21 21:37:19.000000000 -0700 -+++ binutils-2.15/configure.in 2004-07-21 21:37:34.000000000 -0700 -@@ -236,7 +236,7 @@ - - # Some tools are only suitable for building in a "native" situation. - # Remove these if host!=target. --native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff gprof target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" -+native_only="autoconf automake libtool fileutils find gawk gettext gzip hello indent m4 rcs recode sed shellutils tar textutils uudecode wdiff target-groff guile perl time ash bash bzip2 prms gnuserv target-gperf" - - # Similarly, some are only suitable for cross toolchains. - # Remove these if host=target. diff --git a/patches/binutils/2.16.1/stabs-tweak.patch b/patches/binutils/2.16.1/stabs-tweak.patch deleted file mode 100644 index 86e36114..00000000 --- a/patches/binutils/2.16.1/stabs-tweak.patch +++ /dev/null @@ -1,28 +0,0 @@ -Signed-off-by: dank@kegel.com - -See http://sourceware.org/ml/binutils/2005-12/msg00270.html -http://sourceware.org/ml/binutils-cvs/2005-12/msg00139.html - -STABS hash table size change, backported from the binutils CVS tree. Here's -the CVS log comment for the original change: - -revision 1.25 -date: 2005/12/29 10:29:23; author: nickc; state: Exp; lines: +2 -3 -(_bfd_link_section_stabs): Use bfd_hash_table_init rather than -bfd_hash_table_init_n(...,251) so that the size of the hash table can be -controlled by the user. - ---- binutils/bfd/stabs.c.old 4 May 2005 15:53:39 -0000 1.24 -+++ binutils/bfd/stabs.c 29 Dec 2005 10:29:23 -0000 1.25 -@@ -194,9 +194,8 @@ - goto error_return; - /* Make sure the first byte is zero. */ - (void) _bfd_stringtab_add (sinfo->strings, "", TRUE, TRUE); -- if (! bfd_hash_table_init_n (&sinfo->includes, -- stab_link_includes_newfunc, -- 251)) -+ if (! bfd_hash_table_init (&sinfo->includes, -+ stab_link_includes_newfunc)) - goto error_return; - sinfo->stabstr = bfd_make_section_anyway (abfd, ".stabstr"); - if (sinfo->stabstr == NULL) diff --git a/patches/binutils/2.17.50.0.10/100-uclibc-conf.patch b/patches/binutils/2.17.50.0.10/100-uclibc-conf.patch deleted file mode 100644 index 25222e5d..00000000 --- a/patches/binutils/2.17.50.0.10/100-uclibc-conf.patch +++ /dev/null @@ -1,139 +0,0 @@ ---- binutils-2.16.91.0.7/bfd/configure -+++ binutils-2.16.91.0.7/bfd/configure -@@ -3576,7 +3576,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - ---- binutils-2.16.91.0.7/binutils/configure -+++ binutils-2.16.91.0.7/binutils/configure -@@ -3411,7 +3411,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - ---- binutils-2.16.91.0.7/configure -+++ binutils-2.16.91.0.7/configure -@@ -1270,7 +1270,7 @@ - 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) -@@ -1578,7 +1578,7 @@ - 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 ---- binutils-2.16.91.0.7/configure.in -+++ binutils-2.16.91.0.7/configure.in -@@ -468,7 +468,7 @@ - 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) -@@ -776,7 +776,7 @@ - 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 ---- binutils-2.16.91.0.7/gas/configure -+++ binutils-2.16.91.0.7/gas/configure -@@ -3411,7 +3411,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - ---- binutils-2.16.91.0.7/gprof/configure -+++ binutils-2.16.91.0.7/gprof/configure -@@ -3419,6 +3419,11 @@ - lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` - ;; - -+linux-uclibc*) -+ lt_cv_deplibs_check_method=pass_all -+ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` -+ ;; -+ - netbsd* | knetbsd*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' ---- binutils-2.16.91.0.7/ld/configure -+++ binutils-2.16.91.0.7/ld/configure -@@ -3413,7 +3413,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - ---- binutils-2.16.91.0.7/libtool.m4 -+++ binutils-2.16.91.0.7/libtool.m4 -@@ -739,7 +739,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - ---- binutils-2.16.91.0.7/ltconfig -+++ binutils-2.16.91.0.7/ltconfig -@@ -602,6 +602,7 @@ - - # Transform linux* to *-*-linux-gnu*, to support old configure scripts. - case $host_os in -+linux-uclibc*) ;; - linux-gnu*) ;; - linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` - esac -@@ -1247,7 +1248,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - version_type=linux - need_lib_prefix=no - need_version=no ---- binutils-2.16.91.0.7/opcodes/configure -+++ binutils-2.16.91.0.7/opcodes/configure -@@ -3579,7 +3579,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - diff --git a/patches/binutils/2.17.50.0.10/110-arm-eabi-conf.patch b/patches/binutils/2.17.50.0.10/110-arm-eabi-conf.patch deleted file mode 100644 index be85ceb1..00000000 --- a/patches/binutils/2.17.50.0.10/110-arm-eabi-conf.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -urN binutils-2.16.91.0.7.orig/configure binutils-2.16.91.0.7/configure ---- binutils-2.16.91.0.7.orig/configure 2006-05-31 14:54:24.000000000 +0300 -+++ binutils-2.16.91.0.7/configure 2006-05-31 14:55:53.000000000 +0300 -@@ -1299,7 +1299,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; -diff -urN binutils-2.16.91.0.7.orig/configure.in binutils-2.16.91.0.7/configure.in ---- binutils-2.16.91.0.7.orig/configure.in 2006-05-31 14:54:24.000000000 +0300 -+++ binutils-2.16.91.0.7/configure.in 2006-05-31 14:55:53.000000000 +0300 -@@ -497,7 +497,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; diff --git a/patches/binutils/2.17.50.0.10/300-001_ld_makefile_patch.patch b/patches/binutils/2.17.50.0.10/300-001_ld_makefile_patch.patch deleted file mode 100644 index 04a7e61e..00000000 --- a/patches/binutils/2.17.50.0.10/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh -e -## 001_ld_makefile_patch.dpatch -## -## All lines beginning with `## DP:' are a description of the patch. -## DP: Description: correct where ld scripts are installed -## DP: Author: Chris Chimelis -## DP: Upstream status: N/A -## DP: Date: ?? - -if [ $# -ne 1 ]; then - echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" - exit 1 -fi - -[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts -patch_opts="${patch_opts:--f --no-backup-if-mismatch}" - -case "$1" in - -patch) patch $patch_opts -p1 < $0;; - -unpatch) patch $patch_opts -p1 -R < $0;; - *) - echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" - exit 1;; -esac - -exit 0 - -@DPATCH@ ---- binutils-2.16.91.0.1/ld/Makefile.am -+++ binutils-2.16.91.0.1/ld/Makefile.am -@@ -20,7 +20,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@ ---- binutils-2.16.91.0.1/ld/Makefile.in -+++ binutils-2.16.91.0.1/ld/Makefile.in -@@ -268,7 +268,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/patches/binutils/2.17.50.0.10/300-012_check_ldrunpath_length.patch b/patches/binutils/2.17.50.0.10/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 498651a9..00000000 --- a/patches/binutils/2.17.50.0.10/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -e -## 012_check_ldrunpath_length.dpatch by Chris Chimelis -## -## All lines beginning with `## DP:' are a description of the patch. -## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for -## DP: cases where -rpath isn't specified. (#151024) - -if [ $# -ne 1 ]; then - echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" - exit 1 -fi - -[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts -patch_opts="${patch_opts:--f --no-backup-if-mismatch}" - -case "$1" in - -patch) patch $patch_opts -p1 < $0;; - -unpatch) patch $patch_opts -p1 -R < $0;; - *) - echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" - exit 1;; -esac - -exit 0 - -@DPATCH@ -diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em ---- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:58.000000000 +0100 -+++ binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:59.000000000 +0100 -@@ -692,6 +692,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; -@@ -871,6 +873,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/patches/binutils/2.17.50.0.14/100-uclibc-conf.patch b/patches/binutils/2.17.50.0.14/100-uclibc-conf.patch deleted file mode 100644 index 70e2f2db..00000000 --- a/patches/binutils/2.17.50.0.14/100-uclibc-conf.patch +++ /dev/null @@ -1,149 +0,0 @@ -diff -dur binutils-2.17.50.0.14.orig/bfd/configure binutils-2.17.50.0.14/bfd/configure ---- binutils-2.17.50.0.14.orig/bfd/configure 2007-03-23 16:41:48.000000000 +0100 -+++ binutils-2.17.50.0.14/bfd/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3577,7 +3577,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - -diff -dur binutils-2.17.50.0.14.orig/binutils/configure binutils-2.17.50.0.14/binutils/configure ---- binutils-2.17.50.0.14.orig/binutils/configure 2007-03-16 16:48:29.000000000 +0100 -+++ binutils-2.17.50.0.14/binutils/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3410,7 +3410,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - -diff -dur binutils-2.17.50.0.14.orig/configure binutils-2.17.50.0.14/configure ---- binutils-2.17.50.0.14.orig/configure 2007-03-23 16:41:48.000000000 +0100 -+++ binutils-2.17.50.0.14/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -2195,7 +2195,7 @@ - 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) -@@ -2490,7 +2490,7 @@ - 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 -dur binutils-2.17.50.0.14.orig/configure.ac binutils-2.17.50.0.14/configure.ac ---- binutils-2.17.50.0.14.orig/configure.ac 2007-03-23 16:41:48.000000000 +0100 -+++ binutils-2.17.50.0.14/configure.ac 2007-04-10 17:35:41.000000000 +0200 -@@ -484,7 +484,7 @@ - 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) -@@ -779,7 +779,7 @@ - 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 -dur binutils-2.17.50.0.14.orig/gas/configure binutils-2.17.50.0.14/gas/configure ---- binutils-2.17.50.0.14.orig/gas/configure 2007-03-16 16:48:29.000000000 +0100 -+++ binutils-2.17.50.0.14/gas/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3410,7 +3410,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - -diff -dur binutils-2.17.50.0.14.orig/gprof/configure binutils-2.17.50.0.14/gprof/configure ---- binutils-2.17.50.0.14.orig/gprof/configure 2007-01-03 20:49:13.000000000 +0100 -+++ binutils-2.17.50.0.14/gprof/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3413,6 +3413,11 @@ - lt_cv_deplibs_check_method=pass_all - ;; - -+linux-uclibc*) -+ lt_cv_deplibs_check_method=pass_all -+ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so` -+ ;; -+ - netbsd* | knetbsd*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' -diff -dur binutils-2.17.50.0.14.orig/ld/configure binutils-2.17.50.0.14/ld/configure ---- binutils-2.17.50.0.14.orig/ld/configure 2007-03-16 16:48:30.000000000 +0100 -+++ binutils-2.17.50.0.14/ld/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3412,7 +3412,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - -diff -dur binutils-2.17.50.0.14.orig/libtool.m4 binutils-2.17.50.0.14/libtool.m4 ---- binutils-2.17.50.0.14.orig/libtool.m4 2006-02-14 00:10:15.000000000 +0100 -+++ binutils-2.17.50.0.14/libtool.m4 2007-04-10 17:35:41.000000000 +0200 -@@ -739,7 +739,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - -diff -dur binutils-2.17.50.0.14.orig/ltconfig binutils-2.17.50.0.14/ltconfig ---- binutils-2.17.50.0.14.orig/ltconfig 2006-07-15 20:23:48.000000000 +0200 -+++ binutils-2.17.50.0.14/ltconfig 2007-04-10 17:35:41.000000000 +0200 -@@ -602,6 +602,7 @@ - - # Transform linux* to *-*-linux-gnu*, to support old configure scripts. - case $host_os in -+linux-uclibc*) ;; - linux-gnu*) ;; - linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` - esac -@@ -1247,7 +1248,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - version_type=linux - need_lib_prefix=no - need_version=no -diff -dur binutils-2.17.50.0.14.orig/opcodes/configure binutils-2.17.50.0.14/opcodes/configure ---- binutils-2.17.50.0.14.orig/opcodes/configure 2007-03-16 16:48:30.000000000 +0100 -+++ binutils-2.17.50.0.14/opcodes/configure 2007-04-10 17:35:41.000000000 +0200 -@@ -3578,7 +3578,7 @@ - ;; - - # This must be Linux ELF. --linux-gnu*) -+linux-gnu*|linux-uclibc*) - lt_cv_deplibs_check_method=pass_all - ;; - diff --git a/patches/binutils/2.17.50.0.14/110-arm-eabi-conf.patch b/patches/binutils/2.17.50.0.14/110-arm-eabi-conf.patch deleted file mode 100644 index 14621d87..00000000 --- a/patches/binutils/2.17.50.0.14/110-arm-eabi-conf.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -dur binutils-2.17.50.0.14.orig/configure binutils-2.17.50.0.14/configure ---- binutils-2.17.50.0.14.orig/configure 2007-04-10 17:38:23.000000000 +0200 -+++ binutils-2.17.50.0.14/configure 2007-04-10 17:38:43.000000000 +0200 -@@ -2224,7 +2224,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; -diff -dur binutils-2.17.50.0.14.orig/configure.ac binutils-2.17.50.0.14/configure.ac ---- binutils-2.17.50.0.14.orig/configure.ac 2007-04-10 17:38:23.000000000 +0200 -+++ binutils-2.17.50.0.14/configure.ac 2007-04-10 17:38:43.000000000 +0200 -@@ -513,7 +513,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; diff --git a/patches/binutils/2.17.50.0.14/300-001_ld_makefile_patch.patch b/patches/binutils/2.17.50.0.14/300-001_ld_makefile_patch.patch deleted file mode 100644 index b919296d..00000000 --- a/patches/binutils/2.17.50.0.14/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -dur binutils-2.17.50.0.14.orig/ld/Makefile.am binutils-2.17.50.0.14/ld/Makefile.am ---- binutils-2.17.50.0.14.orig/ld/Makefile.am 2007-03-16 16:48:30.000000000 +0100 -+++ binutils-2.17.50.0.14/ld/Makefile.am 2007-04-10 17:40:16.000000000 +0200 -@@ -17,7 +17,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 -dur binutils-2.17.50.0.14.orig/ld/Makefile.in binutils-2.17.50.0.14/ld/Makefile.in ---- binutils-2.17.50.0.14.orig/ld/Makefile.in 2007-03-16 16:48:30.000000000 +0100 -+++ binutils-2.17.50.0.14/ld/Makefile.in 2007-04-10 17:40:16.000000000 +0200 -@@ -274,7 +274,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/patches/binutils/2.17.50.0.14/300-012_check_ldrunpath_length.patch b/patches/binutils/2.17.50.0.14/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 3af193ef..00000000 --- a/patches/binutils/2.17.50.0.14/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -dur binutils-2.17.50.0.14.orig/ld/emultempl/elf32.em binutils-2.17.50.0.14/ld/emultempl/elf32.em ---- binutils-2.17.50.0.14.orig/ld/emultempl/elf32.em 2007-03-23 16:42:51.000000000 +0100 -+++ binutils-2.17.50.0.14/ld/emultempl/elf32.em 2007-04-10 17:41:24.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/patches/binutils/2.17.50.0.17/110-arm-eabi-conf.patch b/patches/binutils/2.17.50.0.17/110-arm-eabi-conf.patch deleted file mode 100644 index 04e19bea..00000000 --- a/patches/binutils/2.17.50.0.17/110-arm-eabi-conf.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -u binutils-2.17.50.0.17.oorig/configure binutils-2.17.50.0.17/configure ---- binutils-2.17.50.0.17.oorig/configure 2007-06-18 19:29:28.000000000 +0200 -+++ binutils-2.17.50.0.17/configure 2007-06-25 09:58:36.000000000 +0200 -@@ -2224,7 +2224,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; -diff -u binutils-2.17.50.0.17.oorig/configure.ac binutils-2.17.50.0.17/configure.ac ---- binutils-2.17.50.0.17.oorig/configure.ac 2007-06-18 19:29:28.000000000 +0200 -+++ binutils-2.17.50.0.17/configure.ac 2007-06-25 09:58:36.000000000 +0200 -@@ -513,7 +513,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; diff --git a/patches/binutils/2.17.50.0.17/300-001_ld_makefile_patch.patch b/patches/binutils/2.17.50.0.17/300-001_ld_makefile_patch.patch deleted file mode 100644 index 5cb0f614..00000000 --- a/patches/binutils/2.17.50.0.17/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,24 +0,0 @@ -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/patches/binutils/2.17.50.0.17/300-012_check_ldrunpath_length.patch b/patches/binutils/2.17.50.0.17/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 6e809213..00000000 --- a/patches/binutils/2.17.50.0.17/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,21 +0,0 @@ -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/patches/binutils/2.17.50.0.18/110-arm-eabi-conf.patch b/patches/binutils/2.17.50.0.18/110-arm-eabi-conf.patch deleted file mode 100644 index 04e19bea..00000000 --- a/patches/binutils/2.17.50.0.18/110-arm-eabi-conf.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -u binutils-2.17.50.0.17.oorig/configure binutils-2.17.50.0.17/configure ---- binutils-2.17.50.0.17.oorig/configure 2007-06-18 19:29:28.000000000 +0200 -+++ binutils-2.17.50.0.17/configure 2007-06-25 09:58:36.000000000 +0200 -@@ -2224,7 +2224,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; -diff -u binutils-2.17.50.0.17.oorig/configure.ac binutils-2.17.50.0.17/configure.ac ---- binutils-2.17.50.0.17.oorig/configure.ac 2007-06-18 19:29:28.000000000 +0200 -+++ binutils-2.17.50.0.17/configure.ac 2007-06-25 09:58:36.000000000 +0200 -@@ -513,7 +513,7 @@ - arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - ;; -- arm*-*-linux-gnueabi) -+ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" - ;; diff --git a/patches/binutils/2.17.50.0.18/300-001_ld_makefile_patch.patch b/patches/binutils/2.17.50.0.18/300-001_ld_makefile_patch.patch deleted file mode 100644 index 5cb0f614..00000000 --- a/patches/binutils/2.17.50.0.18/300-001_ld_makefile_patch.patch +++ /dev/null @@ -1,24 +0,0 @@ -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/patches/binutils/2.17.50.0.18/300-012_check_ldrunpath_length.patch b/patches/binutils/2.17.50.0.18/300-012_check_ldrunpath_length.patch deleted file mode 100644 index 6e809213..00000000 --- a/patches/binutils/2.17.50.0.18/300-012_check_ldrunpath_length.patch +++ /dev/null @@ -1,21 +0,0 @@ -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, -- cgit v1.2.3