Hello community, here is the log from the commit of package binutils checked in at Thu May 11 02:05:28 CEST 2006. -------- --- binutils/binutils.changes 2006-05-05 16:35:46.000000000 +0200 +++ STABLE/binutils/binutils.changes 2006-05-08 15:22:37.000000000 +0200 @@ -1,0 +2,6 @@ +Mon May 8 15:21:55 CEST 2006 - hare@suse.de + +- Fix invalid exeception on S/390 when calling res_init() + [#172700 - LTC23600] + +------------------------------------------------------------------- cross-alpha-binutils.changes: same change cross-arm-binutils.changes: same change cross-avr-binutils.changes: same change cross-hppa-binutils.changes: same change cross-i386-binutils.changes: same change cross-ia64-binutils.changes: same change cross-mips-binutils.changes: same change cross-ppc-binutils.changes: same change cross-ppc64-binutils.changes: same change cross-s390-binutils.changes: same change cross-s390x-binutils.changes: same change cross-sparc-binutils.changes: same change cross-x86_64-binutils.changes: same change New: ---- s390-tlsfix.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ binutils.spec ++++++ --- /var/tmp/diff_new_pack.ZdxTld/_old 2006-05-11 02:05:01.000000000 +0200 +++ /var/tmp/diff_new_pack.ZdxTld/_new 2006-05-11 02:05:01.000000000 +0200 @@ -49,7 +49,7 @@ %endif Autoreqprov: on Version: 2.16.91.0.5 -Release: 21 +Release: 23 Summary: GNU Binutils Source: ftp://ftp.kernel.org/pub/linux/devel/binutils/binutils-%{version}.tar.bz2 Source1: pre_checkin.sh @@ -92,6 +92,7 @@ Patch53: elf-emit-reloc.diff Patch54: ppc-tls.diff Patch55: elf-fixup.diff +Patch56: s390-tlsfix.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %if "%{name}" != "binutils" %define _prefix /opt/cross @@ -220,6 +221,7 @@ %patch53 %patch54 %patch55 +%patch56 -p1 # # test_vanilla %endif @@ -454,6 +456,9 @@ %endif %changelog -n binutils +* Mon May 08 2006 - hare@suse.de +- Fix invalid exeception on S/390 when calling res_init() + [#172700 - LTC23600] * Fri May 05 2006 - schwab@suse.de - Fix huge link times [#167593]. * Tue Apr 11 2006 - schwab@suse.de cross-alpha-binutils.spec: same change cross-arm-binutils.spec: same change cross-avr-binutils.spec: same change cross-hppa-binutils.spec: same change cross-i386-binutils.spec: same change cross-ia64-binutils.spec: same change cross-mips-binutils.spec: same change cross-ppc-binutils.spec: same change cross-ppc64-binutils.spec: same change cross-s390-binutils.spec: same change cross-s390x-binutils.spec: same change cross-sparc-binutils.spec: same change cross-x86_64-binutils.spec: same change ++++++ s390-tlsfix.diff ++++++ diff -urpN src/bfd/elf32-s390.c src-s390/bfd/elf32-s390.c --- src/bfd/elf32-s390.c 2006-03-23 11:36:06.000000000 +0100 +++ src-s390/bfd/elf32-s390.c 2006-05-05 14:13:39.000000000 +0200 @@ -2268,6 +2268,7 @@ invalid_tls_insn (input_bfd, input_secti input_section, (long) rel->r_offset, howto->name); + bfd_set_error (bfd_error_bad_value); } /* Relocate a 390 ELF section. */ @@ -2982,16 +2983,44 @@ elf_s390_relocate_section (output_bfd, i unsigned int insn; insn = bfd_get_32 (input_bfd, contents + rel->r_offset); - if ((insn & 0xff000fff) != 0x4d000000) + if ((insn & 0xff000fff) != 0x4d000000 && + (insn & 0xffff0000) != 0xc0e50000) invalid_tls_insn (input_bfd, input_section, rel); if (!info->shared && (h == NULL || h->dynindx == -1)) - /* GD->LE transition. - bas %r14,0(%rx,%r13) -> bc 0,0 */ - insn = 0x47000000; + { + if ((insn & 0xff000000) == 0x4d000000) + { + /* GD->LE transition. + bas %r14,0(%rx,%r13) -> bc 0,0 */ + insn = 0x47000000; + } + else + { + /* GD->LE transition. + brasl %r14,_tls_get_addr@plt -> brcl 0,. */ + insn = 0xc0040000; + bfd_put_16 (output_bfd, 0x0000, + contents + rel->r_offset + 4); + } + } else - /* GD->IE transition. - bas %r14,0(%rx,%r13) -> l %r2,0(%r2,%r12) */ - insn = 0x5822c000; + { + if ((insn & 0xff000000) == 0x4d000000) + { + /* GD->IE transition. + bas %r14,0(%rx,%r13) -> l %r2,0(%r2,%r12) */ + insn = 0x5822c000; + } + else + { + /* GD->IE transition. + brasl %r14,__tls_get_addr@plt -> + l %r2,0(%r2,%r12) ; bcr 0,0 */ + insn = 0x5822c000; + bfd_put_16 (output_bfd, 0x0700, + contents + rel->r_offset + 4); + } + } bfd_put_32 (output_bfd, insn, contents + rel->r_offset); } else if (r_type == R_390_TLS_LDCALL) @@ -3001,11 +3030,23 @@ elf_s390_relocate_section (output_bfd, i unsigned int insn; insn = bfd_get_32 (input_bfd, contents + rel->r_offset); - if ((insn & 0xff000fff) != 0x4d000000) + if ((insn & 0xff000fff) != 0x4d000000 && + (insn & 0xffff0000) != 0xc0e50000) invalid_tls_insn (input_bfd, input_section, rel); - /* LD->LE transition. - bas %r14,0(%rx,%r13) -> bc 0,0 */ - insn = 0x47000000; + if ((insn & 0xff000000) == 0x4d000000) + { + /* LD->LE transition. + bas %r14,0(%rx,%r13) -> bc 0,0 */ + insn = 0x47000000; + } + else + { + /* LD->LE transition. + brasl %r14,__tls_get_addr@plt -> brcl 0,. */ + insn = 0xc0040000; + bfd_put_16 (output_bfd, 0x0000, + contents + rel->r_offset + 4); + } bfd_put_32 (output_bfd, insn, contents + rel->r_offset); } } diff -urpN src/bfd/elf64-s390.c src-s390/bfd/elf64-s390.c --- src/bfd/elf64-s390.c 2006-05-05 14:14:58.000000000 +0200 +++ src-s390/bfd/elf64-s390.c 2006-05-05 14:13:08.000000000 +0200 @@ -2240,6 +2240,7 @@ invalid_tls_insn (input_bfd, input_secti input_section, (long) rel->r_offset, howto->name); + bfd_set_error (bfd_error_bad_value); } /* Relocate a 390 ELF section. */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...