Hello community, here is the log from the commit of package binutils for openSUSE:Factory checked in at Mon Jul 11 16:01:35 CEST 2011. -------- --- binutils/binutils.changes 2011-07-06 10:33:56.000000000 +0200 +++ binutils/binutils.changes 2011-07-11 10:43:04.000000000 +0200 @@ -1,0 +2,10 @@ +Mon Jul 11 08:42:13 UTC 2011 - rguenther@novell.com + +- BuildRequire glibc-devel-static to fix static linking tests. + +------------------------------------------------------------------- +Tue Jul 5 12:42:10 UTC 2011 - saschpe@suse.de + +- Add patch to fix a readelf endless loop bug [#12855] + +------------------------------------------------------------------- @@ -19,0 +30 @@ +- Add dependency to opcodes from gold. cross-alpha-binutils.changes: same change cross-arm-binutils.changes: same change cross-hppa-binutils.changes: same change cross-hppa64-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-spu-binutils.changes: same change cross-x86_64-binutils.changes: same change calling whatdependson for head-i586 New: ---- gold-depend-on-opcodes.diff readelf-bad-elf-endless-loop.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ binutils.spec ++++++ --- /var/tmp/diff_new_pack.Q973VJ/_old 2011-07-11 15:58:41.000000000 +0200 +++ /var/tmp/diff_new_pack.Q973VJ/_new 2011-07-11 15:58:41.000000000 +0200 @@ -19,6 +19,10 @@ Name: binutils BuildRequires: bison dejagnu flex gcc-c++ +# for the testsuite +%if 0%{suse_version} >= 1210 +BuildRequires: glibc-devel-static +%endif # for some gold tests BuildRequires: bc %if 0%{suse_version} > 1110 @@ -27,7 +31,7 @@ BuildRequires: zlib-devel %endif Version: 2.21.1 -Release: 1 +Release: 6 # # RUN_TESTS %define run_tests %(test ! -f %_sourcedir/RUN_TESTS ; echo $?) @@ -89,6 +93,8 @@ Patch15: fixup-testcase-perturb.diff Patch16: amd-bdver2-and-fixes2.diff.gz Patch17: binutils-add-pep.diff +Patch18: gold-depend-on-opcodes.diff +Patch19: readelf-bad-elf-endless-loop.patch Patch90: cross-avr-nesc-as.patch Patch92: cross-avr-omit_section_dynsym.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -301,6 +307,8 @@ %patch15 %patch16 -p1 %patch17 -p1 +%patch18 +%patch19 %if "%{TARGET}" == "avr" cp gas/config/tc-avr.h gas/config/tc-avr-nesc.h %patch90 ++++++ cross-alpha-binutils.spec ++++++ --- /var/tmp/diff_new_pack.Q973VJ/_old 2011-07-11 15:58:41.000000000 +0200 +++ /var/tmp/diff_new_pack.Q973VJ/_new 2011-07-11 15:58:41.000000000 +0200 @@ -19,6 +19,10 @@ Name: cross-alpha-binutils BuildRequires: bison dejagnu flex gcc-c++ +# for the testsuite +%if 0%{suse_version} >= 1210 +BuildRequires: glibc-devel-static +%endif # for some gold tests BuildRequires: bc %if 0%{suse_version} > 1110 @@ -27,7 +31,7 @@ BuildRequires: zlib-devel %endif Version: 2.21.1 -Release: 1 +Release: 2 # # RUN_TESTS %define run_tests %(test ! -f %_sourcedir/RUN_TESTS ; echo $?) @@ -89,6 +93,8 @@ Patch15: fixup-testcase-perturb.diff Patch16: amd-bdver2-and-fixes2.diff.gz Patch17: binutils-add-pep.diff +Patch18: gold-depend-on-opcodes.diff +Patch19: readelf-bad-elf-endless-loop.patch Patch90: cross-avr-nesc-as.patch Patch92: cross-avr-omit_section_dynsym.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -273,6 +279,8 @@ %patch15 %patch16 -p1 %patch17 -p1 +%patch18 +%patch19 %if "%{TARGET}" == "avr" cp gas/config/tc-avr.h gas/config/tc-avr-nesc.h %patch90 cross-arm-binutils.spec: same change cross-hppa-binutils.spec: same change cross-hppa64-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-spu-binutils.spec: same change cross-x86_64-binutils.spec: same change ++++++ gold-depend-on-opcodes.diff ++++++ Index: Makefile.def =================================================================== --- Makefile.def.orig 2010-10-20 17:43:39.000000000 +0200 +++ Makefile.def 2011-07-01 12:31:39.000000000 +0200 @@ -434,6 +434,7 @@ dependencies = { module=configure-gold; dependencies = { module=all-gold; on=all-libiberty; }; dependencies = { module=all-gold; on=all-intl; }; dependencies = { module=all-gold; on=all-bfd; }; +dependencies = { module=all-gold; on=all-opcodes; }; dependencies = { module=all-gold; on=all-build-bison; }; dependencies = { module=all-gold; on=all-build-byacc; }; dependencies = { module=check-gold; on=all-binutils; }; Index: Makefile.in =================================================================== --- Makefile.in.orig 2011-06-27 11:07:34.000000000 +0200 +++ Makefile.in 2011-07-01 12:32:18.000000000 +0200 @@ -58297,6 +58297,14 @@ all-stage3-gold: maybe-all-stage3-bfd all-stage4-gold: maybe-all-stage4-bfd all-stageprofile-gold: maybe-all-stageprofile-bfd all-stagefeedback-gold: maybe-all-stagefeedback-bfd +all-gold: maybe-all-opcodes + +all-stage1-gold: maybe-all-stage1-opcodes +all-stage2-gold: maybe-all-stage2-opcodes +all-stage3-gold: maybe-all-stage3-opcodes +all-stage4-gold: maybe-all-stage4-opcodes +all-stageprofile-gold: maybe-all-stageprofile-opcodes +all-stagefeedback-gold: maybe-all-stagefeedback-opcodes all-gold: maybe-all-build-bison all-stage1-gold: maybe-all-build-bison ++++++ readelf-bad-elf-endless-loop.patch ++++++ --- binutils/readelf.c 2011/04/28 17:23:16 1.545 +++ binutils/readelf.c 2011/06/08 15:59:07 1.546 @@ -4548,7 +4554,7 @@ dynamic_strings = (char *) get_data (NULL, file, section->sh_offset, 1, section->sh_size, _("dynamic strings")); - dynamic_strings_length = section->sh_size; + dynamic_strings_length = dynamic_strings == NULL ? 0 : section->sh_size; } else if (section->sh_type == SHT_SYMTAB_SHNDX) { @@ -5029,6 +5035,8 @@ start = (unsigned char *) get_data (NULL, file, section->sh_offset, 1, section->sh_size, _("section data")); + if (start == NULL) + continue; indices = start; size = (section->sh_size / section->sh_entsize) - 1; @@ -5734,6 +5742,7 @@ aux.symtab = GET_ELF_SYMBOLS (file, sec); strsec = section_headers + sec->sh_link; + assert (aux.strtab == NULL); aux.strtab = (char *) get_data (NULL, file, strsec->sh_offset, 1, strsec->sh_size, _("string table")); @@ -5816,11 +5825,11 @@ } else { - aux.info_size = sec->sh_size; aux.info_addr = sec->sh_addr; aux.info = (unsigned char *) get_data (NULL, file, sec->sh_offset, 1, - aux.info_size, + sec->sh_size, _("unwind info")); + aux.info_size = aux.info == NULL ? 0 : sec->sh_size; printf (_("\nUnwind section ")); @@ -6147,6 +6156,7 @@ aux.symtab = GET_ELF_SYMBOLS (file, sec); strsec = section_headers + sec->sh_link; + assert (aux.strtab == NULL); aux.strtab = (char *) get_data (NULL, file, strsec->sh_offset, 1, strsec->sh_size, _("string table")); @@ -6273,7 +6283,6 @@ arm_sec->sec = sec; arm_sec->data = get_data (NULL, aux->file, sec->sh_offset, 1, sec->sh_size, _("unwind data")); - arm_sec->rela = NULL; arm_sec->nrelas = 0; @@ -7032,6 +7041,7 @@ aux.symtab = GET_ELF_SYMBOLS (file, sec); strsec = section_headers + sec->sh_link; + assert (aux.strtab == NULL); aux.strtab = get_data (NULL, file, strsec->sh_offset, 1, strsec->sh_size, _("string table")); aux.strtab_size = aux.strtab != NULL ? strsec->sh_size : 0; @@ -7541,7 +7551,7 @@ dynamic_strings = (char *) get_data (NULL, file, offset, 1, str_tab_len, _("dynamic string table")); - dynamic_strings_length = str_tab_len; + dynamic_strings_length = dynamic_strings == NULL ? 0 : str_tab_len; break; } } @@ -8079,9 +8089,9 @@ edefs = (Elf_External_Verdef *) get_data (NULL, file, section->sh_offset, 1,section->sh_size, _("version definition section")); - endbuf = (char *) edefs + section->sh_size; if (!edefs) break; + endbuf = (char *) edefs + section->sh_size; for (idx = cnt = 0; cnt < section->sh_info; ++cnt) { @@ -8198,9 +8208,9 @@ section->sh_offset, 1, section->sh_size, _("version need section")); - endbuf = (char *) eneed + section->sh_size; if (!eneed) break; + endbuf = (char *) eneed + section->sh_size; for (idx = cnt = 0; cnt < section->sh_info; ++cnt) { @@ -8416,9 +8426,10 @@ Elf_External_Vernaux evna; unsigned long a_off; - get_data (&evn, file, offset, sizeof (evn), 1, - _("version need")); - + if (get_data (&evn, file, offset, sizeof (evn), 1, + _("version need")) == NULL) + break; + ivn.vn_aux = BYTE_GET (evn.vn_aux); ivn.vn_next = BYTE_GET (evn.vn_next); @@ -8426,11 +8437,17 @@ do { - get_data (&evna, file, a_off, sizeof (evna), - 1, _("version need aux (2)")); - - ivna.vna_next = BYTE_GET (evna.vna_next); - ivna.vna_other = BYTE_GET (evna.vna_other); + if (get_data (&evna, file, a_off, sizeof (evna), + 1, _("version need aux (2)")) == NULL) + { + ivna.vna_next = 0; + ivna.vna_other = 0; + } + else + { + ivna.vna_next = BYTE_GET (evna.vna_next); + ivna.vna_other = BYTE_GET (evna.vna_other); + } a_off += ivna.vna_next; } @@ -8471,11 +8488,17 @@ do { - get_data (&evd, file, offset, sizeof (evd), 1, - _("version def")); - - ivd.vd_next = BYTE_GET (evd.vd_next); - ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + if (get_data (&evd, file, offset, sizeof (evd), 1, + _("version def")) == NULL) + { + ivd.vd_next = 0; + ivd.vd_ndx = 0; + } + else + { + ivd.vd_next = BYTE_GET (evd.vd_next); + ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + } offset += ivd.vd_next; } @@ -8489,10 +8512,11 @@ ivd.vd_aux = BYTE_GET (evd.vd_aux); - get_data (&evda, file, - offset - ivd.vd_next + ivd.vd_aux, - sizeof (evda), 1, - _("version def aux")); + if (get_data (&evda, file, + offset - ivd.vd_next + ivd.vd_aux, + sizeof (evda), 1, + _("version def aux")) == NULL) + break; ivda.vda_name = BYTE_GET (evda.vda_name); @@ -9153,8 +9177,8 @@ print_symbol (25, psym->st_name < strtab_size ? strtab + psym->st_name : _("<corrupt>")); - if (section->sh_type == SHT_DYNSYM && - version_info[DT_VERSIONTAGIDX (DT_VERSYM)] != 0) + if (section->sh_type == SHT_DYNSYM + && version_info[DT_VERSIONTAGIDX (DT_VERSYM)] != 0) { unsigned char data[2]; unsigned short vers_data; @@ -9166,8 +9190,9 @@ (file, version_info[DT_VERSIONTAGIDX (DT_VERSYM)], sizeof data + si * sizeof (vers_data)); - get_data (&data, file, offset + si * sizeof (vers_data), - sizeof (data), 1, _("version data")); + if (get_data (&data, file, offset + si * sizeof (vers_data), + sizeof (data), 1, _("version data")) == NULL) + break; vers_data = byte_get (data, 2); @@ -9195,8 +9220,14 @@ { unsigned long vna_off; - get_data (&evn, file, offset, sizeof (evn), 1, - _("version need")); + if (get_data (&evn, file, offset, sizeof (evn), 1, + _("version need")) == NULL) + { + ivna.vna_next = 0; + ivna.vna_other = 0; + ivna.vna_name = 0; + break; + } ivn.vn_aux = BYTE_GET (evn.vn_aux); ivn.vn_next = BYTE_GET (evn.vn_next); @@ -9207,13 +9238,20 @@ { Elf_External_Vernaux evna; - get_data (&evna, file, vna_off, - sizeof (evna), 1, - _("version need aux (3)")); - - ivna.vna_other = BYTE_GET (evna.vna_other); - ivna.vna_next = BYTE_GET (evna.vna_next); - ivna.vna_name = BYTE_GET (evna.vna_name); + if (get_data (&evna, file, vna_off, + sizeof (evna), 1, + _("version need aux (3)")) == NULL) + { + ivna.vna_next = 0; + ivna.vna_other = 0; + ivna.vna_name = 0; + } + else + { + ivna.vna_other = BYTE_GET (evna.vna_other); + ivna.vna_next = BYTE_GET (evna.vna_next); + ivna.vna_name = BYTE_GET (evna.vna_name); + } vna_off += ivna.vna_next; } @@ -9260,12 +9298,19 @@ { Elf_External_Verdef evd; - get_data (&evd, file, off, sizeof (evd), - 1, _("version def")); - - ivd.vd_ndx = BYTE_GET (evd.vd_ndx); - ivd.vd_aux = BYTE_GET (evd.vd_aux); - ivd.vd_next = BYTE_GET (evd.vd_next); + if (get_data (&evd, file, off, sizeof (evd), + 1, _("version def")) == NULL) + { + ivd.vd_ndx = 0; + ivd.vd_aux = 0; + ivd.vd_next = 0; + } + else + { + ivd.vd_ndx = BYTE_GET (evd.vd_ndx); + ivd.vd_aux = BYTE_GET (evd.vd_aux); + ivd.vd_next = BYTE_GET (evd.vd_next); + } off += ivd.vd_next; } @@ -9275,8 +9320,9 @@ off -= ivd.vd_next; off += ivd.vd_aux; - get_data (&evda, file, off, sizeof (evda), - 1, _("version def aux")); + if (get_data (&evda, file, off, sizeof (evda), + 1, _("version def aux")) == NULL) + break; ivda.vda_name = BYTE_GET (evda.vda_name); @@ -10361,12 +10407,17 @@ snprintf (buf, sizeof (buf), _("%s section data"), section->name); section->address = sec->sh_addr; - section->size = sec->sh_size; section->start = (unsigned char *) get_data (NULL, (FILE *) file, sec->sh_offset, 1, sec->sh_size, buf); - if (uncompress_section_contents (§ion->start, §ion->size)) - sec->sh_size = section->size; + if (section->start == NULL) + section->size = 0; + else + { + section->size = sec->sh_size; + if (uncompress_section_contents (§ion->start, §ion->size)) + sec->sh_size = section->size; + } if (section->start == NULL) return 0; @@ -11934,6 +11985,9 @@ offset = offset_from_vma (file, pltgot, global_end - pltgot); data = (unsigned char *) get_data (NULL, file, offset, global_end - pltgot, 1, _("GOT")); + if (data == NULL) + return 0; + printf (_("\nPrimary GOT:\n")); printf (_(" Canonical gp value: ")); print_vma (pltgot + 0x7ff0, LONG_HEX); @@ -12030,6 +12084,9 @@ offset = offset_from_vma (file, mips_pltgot, end - mips_pltgot); data = (unsigned char *) get_data (NULL, file, offset, end - mips_pltgot, 1, _("PLT GOT")); + if (data == NULL) + return 0; + printf (_("\nPLT GOT:\n\n")); printf (_(" Reserved entries:\n")); printf (_(" %*s %*s Purpose\n"), @@ -12108,8 +12165,6 @@ strtab = (char *) get_data (NULL, file, string_sec->sh_offset, 1, string_sec->sh_size, _("liblist string table")); - strtab_size = string_sec->sh_size; - if (strtab == NULL || section->sh_entsize != sizeof (Elf32_External_Lib)) { @@ -12117,6 +12172,7 @@ free (elib); break; } + strtab_size = string_sec->sh_size; printf (_("\nLibrary list section '%s' contains %lu entries:\n"), SECTION_NAME (section), ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org