Hello community,

here is the log from the commit of package elfutils for openSUSE:Factory 
checked in at 2012-03-23 12:05:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/elfutils (Old)
 and      /work/SRC/openSUSE:Factory/.elfutils.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "elfutils", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/elfutils/elfutils.changes        2012-01-06 
11:43:36.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.elfutils.new/elfutils.changes   2012-03-23 
12:05:03.000000000 +0100
@@ -1,0 +2,12 @@
+Thu Mar 15 08:49:20 UTC 2012 - [email protected]
+
+- Update to 0.153:
+  * Fix building with gcc 4.7
+  *  New --disable-werror for portability.
+  * Support for .zdebug sections
+  * type_units and DW_AT_GNU_odr_signature support
+  * low level support DW_OP_GNU_entry_value and DW_TAG_GNU_call_site
+- Revert scanf changes in portability patch since C99 gives %a a new 
+  meaning.
+
+-------------------------------------------------------------------

Old:
----
  elfutils-0.152.tar.bz2

New:
----
  elfutils-0.153.tar.bz2
  elfutils-revert-portability-scanf.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ elfutils.spec ++++++
--- /var/tmp/diff_new_pack.u3tGx8/_old  2012-03-23 12:05:05.000000000 +0100
+++ /var/tmp/diff_new_pack.u3tGx8/_new  2012-03-23 12:05:05.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package elfutils
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -15,9 +15,11 @@
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
+
+
 Name:           elfutils
 License:        GPL-2.0-with-osi-exception
-Version:        0.152
+Version:        0.153
 Release:        0
 Summary:        Higher-level library to access ELF
 Group:          System/Libraries
@@ -32,6 +34,7 @@
 Patch5:         elfutils-uninitialized.diff
 Patch6:         elfutils-0.137-dwarf-header-check-fix.diff
 Patch7:         elfutils-0.148-dont-crash.diff
+Patch8:         elfutils-revert-portability-scanf.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  automake
 BuildRequires:  bison
@@ -142,6 +145,7 @@
 %patch5 -p1
 %patch6 -p1
 %patch7 -p1
+%patch8 -p1 -R
 
 %build
 # Change DATE/TIME macros to use last change time of elfutils.changes

++++++ README-BEFORE-ADDING-PATCHES ++++++
--- /var/tmp/diff_new_pack.u3tGx8/_old  2012-03-23 12:05:05.000000000 +0100
+++ /var/tmp/diff_new_pack.u3tGx8/_new  2012-03-23 12:05:05.000000000 +0100
@@ -1,5 +1,5 @@
 All patches need to have a patch description header similar to what is used in 
-SuSE kernel git tree. 
+SUSE kernel git tree. 
 
 Patches added without this will be reverted.
 

++++++ elfutils-0.152.tar.bz2 -> elfutils-0.153.tar.bz2 ++++++
++++ 35274 lines of diff (skipped)

++++++ elfutils-portability.patch ++++++
++++ 1318 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/elfutils/elfutils-portability.patch
++++ and /work/SRC/openSUSE:Factory/.elfutils.new/elfutils-portability.patch

++++++ elfutils-revert-portability-scanf.patch ++++++
--- elfutils/src/addr2line.c
+++ elfutils/src/addr2line.c
@@ -455,10 +455,10 @@ handle_address (const char *string, Dwfl
       bool parsed = false;
       int i, j;
       char *name = NULL;
-      if (sscanf (string, "(%m[^)])%" PRIiMAX "%n", &name, &addr, &i) == 2
+      if (sscanf (string, "(%a[^)])%" PRIiMAX "%n", &name, &addr, &i) == 2
          && string[i] == '\0')
        parsed = adjust_to_section (name, &addr, dwfl);
-      switch (sscanf (string, "%m[^-+]%n%" PRIiMAX "%n", &name, &i, &addr, &j))
+      switch (sscanf (string, "%a[^-+]%n%" PRIiMAX "%n", &name, &i, &addr, &j))
        {
        default:
          break;
--- elfutils/tests/line2addr.c
+++ elfutils/tests/line2addr.c
@@ -132,7 +132,7 @@ main (int argc, char *argv[])
     {
       struct args a = { .arg = argv[cnt] };
 
-      switch (sscanf (a.arg, "%m[^:]:%d", &a.file, &a.line))
+      switch (sscanf (a.arg, "%a[^:]:%d", &a.file, &a.line))
        {
        default:
        case 0:
++++++ elfutils-robustify.patch ++++++
--- /var/tmp/diff_new_pack.u3tGx8/_old  2012-03-23 12:05:05.000000000 +0100
+++ /var/tmp/diff_new_pack.u3tGx8/_new  2012-03-23 12:05:05.000000000 +0100
@@ -1,13 +1,47 @@
-From: Tony Jones <[email protected]>
-Subject: Elfutils robustify patch
-Version: 0.152
-References: 
https://fedorahosted.org/releases/e/l/elfutils/0.152/elfutils-robustify.patch
-Upstream: yes
-
-This patch contains functional/stability fixes that are regarded as generally
-useful by the community but are not accepted by the elfutils maintainer (and
-are therefore not in the git repository). 
-
+--- elfutils/libdwfl/ChangeLog
++++ elfutils/libdwfl/ChangeLog
+@@ -41,6 +41,11 @@
+       * dwfl_module_getdwarf.c (open_elf): Clear errno before CBFAIL.
+       Reported by Kurt Roeckx <[email protected]>.
+ 
++2011-03-23  Petr Machata  <[email protected]>
++
++      * relocate.c (relocate_section): Use gelf_fsize instead of relying
++      on shdr->sh_entsize.
++
+ 2011-02-11  Roland McGrath  <[email protected]>
+ 
+       * linux-kernel-modules.c (try_kernel_name): Try .gz, .bz2, .xz
+--- elfutils/libdwfl/relocate.c
++++ elfutils/libdwfl/relocate.c
+@@ -1,5 +1,5 @@
+ /* Relocate debug information.
+-   Copyright (C) 2005-2010 Red Hat, Inc.
++   Copyright (C) 2005-2011 Red Hat, Inc.
+    This file is part of Red Hat elfutils.
+ 
+    Red Hat elfutils is free software; you can redistribute it and/or modify
+@@ -478,7 +478,10 @@ relocate_section (Dwfl_Module *mod, Elf
+       }
+   }
+ 
+-  size_t nrels = shdr->sh_size / shdr->sh_entsize;
++  size_t sh_entsize
++    = gelf_fsize (relocated, shdr->sh_type == SHT_REL ? ELF_T_REL : 
ELF_T_RELA,
++                1, EV_CURRENT);
++  size_t nrels = shdr->sh_size / sh_entsize;
+   size_t complete = 0;
+   if (shdr->sh_type == SHT_REL)
+     for (size_t relidx = 0; !result && relidx < nrels; ++relidx)
+@@ -580,7 +583,7 @@ relocate_section (Dwfl_Module *mod, Elf
+         nrels = next;
+       }
+ 
+-      shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize;
++      shdr->sh_size = reldata->d_size = nrels * sh_entsize;
+       gelf_update_shdr (scn, shdr);
+     }
+ 
 --- elfutils/libelf/ChangeLog
 +++ elfutils/libelf/ChangeLog
 @@ -663,10 +663,53 @@
@@ -875,7 +909,20 @@
  #endif  /* libelfP.h */
 --- elfutils/src/ChangeLog
 +++ elfutils/src/ChangeLog
-@@ -1710,6 +1710,16 @@
+@@ -228,6 +228,12 @@
+ 
+       * readelf.c (dwarf_attr_string): Grok DW_AT_GNU_odr_signature.
+ 
++2011-03-23  Petr Machata  <[email protected]>
++
++      * readelf.c (handle_dynamic, handle_relocs_rel)
++      (handle_relocs_rela, handle_versym, print_liblist):
++      Use gelf_fsize instead of relying on shdr->sh_entsize.
++
+ 2011-02-11  Roland McGrath  <[email protected]>
+ 
+       * elfcmp.c (verbose): New variable.
+@@ -1940,6 +1946,16 @@
        object symbols or symbols with unknown type.
        (check_rel): Likewise.
  
@@ -892,7 +939,7 @@
  2005-06-08  Roland McGrath  <[email protected]>
  
        * readelf.c (print_ops): Add consts.
-@@ -1755,6 +1765,19 @@
+@@ -1985,6 +2001,19 @@
  
        * readelf.c (dwarf_tag_string): Add new tags.
  
@@ -958,7 +1005,7 @@
  static void
  check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size)
  {
-@@ -632,7 +640,8 @@ section [%2d] '%s': symbol table cannot 
+@@ -632,7 +640,8 @@ section [%2d] '%s': symbol table cannot
          }
        }
  
@@ -977,7 +1024,7 @@
      {
        sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem, &xndx);
        if (sym == NULL)
-@@ -690,7 +699,8 @@ section [%2d] '%s': symbol %zu: invalid 
+@@ -690,7 +699,8 @@ section [%2d] '%s': symbol %zu: invalid
        else
        {
          name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name);
@@ -1072,7 +1119,7 @@
      {
        GElf_Dyn dyn_mem;
        GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem);
-@@ -1879,6 +1899,8 @@ section [%2d] '%s': entry size does not 
+@@ -1879,6 +1899,8 @@ section [%2d] '%s': entry size does not
           idx, section_name (ebl, idx));
  
    if (symshdr != NULL
@@ -1175,7 +1222,7 @@
             idx, section_name (ebl, idx), (long int) shdr->sh_size,
             (long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)));
        return;
-@@ -2707,8 +2755,9 @@ section [%2d] '%s' refers in sh_link to 
+@@ -2707,8 +2755,9 @@ section [%2d] '%s' refers in sh_link to
  
    /* The number of elements in the version symbol table must be the
       same as the number of symbols.  */
@@ -1189,7 +1236,7 @@
           idx, section_name (ebl, idx),
 --- elfutils/src/readelf.c
 +++ elfutils/src/readelf.c
-@@ -1178,6 +1178,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
+@@ -1191,6 +1191,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
    Elf32_Word *grpref = (Elf32_Word *) data->d_buf;
  
    GElf_Sym sym_mem;
@@ -1198,7 +1245,7 @@
    printf ((grpref[0] & GRP_COMDAT)
          ? ngettext ("\
  \nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n",
-@@ -1190,8 +1192,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
+@@ -1203,8 +1205,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
                      data->d_size / sizeof (Elf32_Word) - 1),
          elf_ndxscn (scn),
          elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
@@ -1209,7 +1256,7 @@
          ?: gettext ("<INVALID SYMBOL>"),
          data->d_size / sizeof (Elf32_Word) - 1);
  
-@@ -1342,7 +1344,8 @@ static void
+@@ -1355,10 +1357,12 @@ static void
  handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
  {
    int class = gelf_getclass (ebl->elf);
@@ -1219,10 +1266,16 @@
    Elf_Data *data;
    size_t cnt;
    size_t shstrndx;
-@@ -1357,6 +1360,11 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, 
++  size_t sh_entsize;
+ 
+   /* Get the data of the section.  */
+   data = elf_getdata (scn, NULL);
+@@ -1370,21 +1374,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
      error (EXIT_FAILURE, 0,
           gettext ("cannot get section header string table index"));
  
++  sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT);
++
 +  glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem);
 +  if (glink == NULL)
 +    error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"),
@@ -1231,7 +1284,11 @@
    printf (ngettext ("\
  \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 "  Offset: %#08" 
PRIx64 "  Link to section: [%2u] '%s'\n",
                    "\
-@@ -1366,9 +1374,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, 
+ \nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 "  Offset: %#08" 
PRIx64 "  Link to section: [%2u] '%s'\n",
+-                  shdr->sh_size / shdr->sh_entsize),
+-        (unsigned long int) (shdr->sh_size / shdr->sh_entsize),
++                  shdr->sh_size / sh_entsize),
++        (unsigned long int) (shdr->sh_size / sh_entsize),
          class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
          shdr->sh_offset,
          (int) shdr->sh_link,
@@ -1241,8 +1298,32 @@
 +        elf_strptr (ebl->elf, shstrndx, glink->sh_name));
    fputs_unlocked (gettext ("  Type              Value\n"), stdout);
  
-   for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
-@@ -1951,6 +1957,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
+-  for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
++  for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
+     {
+       GElf_Dyn dynmem;
+       GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem);
+@@ -1533,7 +1542,8 @@ static void
+ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
+ {
+   int class = gelf_getclass (ebl->elf);
+-  int nentries = shdr->sh_size / shdr->sh_entsize;
++  size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT);
++  int nentries = shdr->sh_size / sh_entsize;
+ 
+   /* Get the data of the section.  */
+   Elf_Data *data = elf_getdata (scn, NULL);
+@@ -1719,7 +1729,8 @@ static void
+ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
+ {
+   int class = gelf_getclass (ebl->elf);
+-  int nentries = shdr->sh_size / shdr->sh_entsize;
++  size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT);
++  int nentries = shdr->sh_size / sh_entsize;
+ 
+   /* Get the data of the section.  */
+   Elf_Data *data = elf_getdata (scn, NULL);
+@@ -1966,6 +1977,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
      error (EXIT_FAILURE, 0,
           gettext ("cannot get section header string table index"));
  
@@ -1256,7 +1337,7 @@
    /* Now we can compute the number of entries in the section.  */
    unsigned int nsyms = data->d_size / (class == ELFCLASS32
                                       ? sizeof (Elf32_Sym)
-@@ -1961,15 +1974,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
+@@ -1976,15 +1994,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
                    nsyms),
          (unsigned int) elf_ndxscn (scn),
          elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms);
@@ -1273,7 +1354,7 @@
  
    fputs_unlocked (class == ELFCLASS32
                  ? gettext ("\
-@@ -2205,7 +2215,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, 
+@@ -2220,7 +2235,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
      error (EXIT_FAILURE, 0,
           gettext ("cannot get section header string table index"));
  
@@ -1288,7 +1369,7 @@
    printf (ngettext ("\
  \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 "  
Offset: %#08" PRIx64 "  Link to section: [%2u] '%s'\n",
                    "\
-@@ -2216,9 +2232,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, 
+@@ -2231,9 +2252,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
          class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
          shdr->sh_offset,
          (unsigned int) shdr->sh_link,
@@ -1299,7 +1380,7 @@
  
    unsigned int offset = 0;
    for (int cnt = shdr->sh_info; --cnt >= 0; )
-@@ -2271,8 +2285,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
+@@ -2286,8 +2305,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
      error (EXIT_FAILURE, 0,
           gettext ("cannot get section header string table index"));
  
@@ -1315,7 +1396,7 @@
    printf (ngettext ("\
  \nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" 
PRIx64 "  Offset: %#08" PRIx64 "  Link to section: [%2u] '%s'\n",
                    "\
-@@ -2284,9 +2304,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
+@@ -2299,9 +2324,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
          class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
          shdr->sh_offset,
          (unsigned int) shdr->sh_link,
@@ -1326,13 +1407,14 @@
  
    unsigned int offset = 0;
    for (int cnt = shdr->sh_info; --cnt >= 0; )
-@@ -2548,8 +2566,14 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
+@@ -2563,25 +2586,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
        filename = NULL;
      }
  
 +  GElf_Shdr glink_mem;
 +  GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link),
 +                                 &glink_mem);
++  size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT);
 +  if (glink == NULL)
 +    error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"),
 +         elf_ndxscn (scn));
@@ -1342,7 +1424,13 @@
    printf (ngettext ("\
  \nVersion symbols section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 
"  Offset: %#08" PRIx64 "  Link to section: [%2u] '%s'",
                    "\
-@@ -2561,9 +2585,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
+ \nVersion symbols section [%2u] '%s' contains %d entries:\n Addr: %#0*" 
PRIx64 "  Offset: %#08" PRIx64 "  Link to section: [%2u] '%s'",
+-                  shdr->sh_size / shdr->sh_entsize),
++                  shdr->sh_size / sh_entsize),
+         (unsigned int) elf_ndxscn (scn),
+         elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
+-        (int) (shdr->sh_size / shdr->sh_entsize),
++        (int) (shdr->sh_size / sh_entsize),
          class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
          shdr->sh_offset,
          (unsigned int) shdr->sh_link,
@@ -1352,8 +1440,12 @@
 +        elf_strptr (ebl->elf, shstrndx, glink->sh_name));
  
    /* Now we can finally look at the actual contents of this section.  */
-   for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
-@@ -2615,7 +2637,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
+-  for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
++  for (unsigned int cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt)
+     {
+       if (cnt % 2 == 0)
+       printf ("\n %4d:", cnt);
+@@ -2630,7 +2658,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
    for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
      ++counts[lengths[cnt]];
  
@@ -1372,7 +1464,7 @@
    printf (ngettext ("\
  \nHistogram for bucket list length in section [%2u] '%s' (total of %d 
bucket):\n Addr: %#0*" PRIx64 "  Offset: %#08" PRIx64 "  Link to section: [%2u] 
'%s'\n",
                    "\
-@@ -2628,9 +2660,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
+@@ -2643,9 +2681,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
          shdr->sh_addr,
          shdr->sh_offset,
          (unsigned int) shdr->sh_link,
@@ -1383,7 +1475,17 @@
  
    if (extrastr != NULL)
      fputs (extrastr, stdout);
-@@ -4486,6 +4516,16 @@ print_debug_aranges_section (Dwfl_Module
+@@ -2905,7 +2941,8 @@ print_liblist (Ebl *ebl)
+ 
+       if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST)
+       {
+-        int nentries = shdr->sh_size / shdr->sh_entsize;
++        size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_LIB, 1, EV_CURRENT);
++        int nentries = shdr->sh_size / sh_entsize;
+         printf (ngettext ("\
+ \nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d 
entry:\n",
+                           "\
+@@ -4646,6 +4683,16 @@ print_debug_aranges_section (Dwfl_Module
        return;
      }
  
@@ -1402,7 +1504,7 @@
                    "\
 --- elfutils/src/strip.c
 +++ elfutils/src/strip.c
-@@ -555,6 +555,11 @@ handle_elf (int fd, Elf *elf, const char
+@@ -572,6 +572,11 @@ handle_elf (int fd, Elf *elf, const char
        goto fail_close;
      }
  
@@ -1414,7 +1516,7 @@
    /* Storage for section information.  We leave room for two more
       entries since we unconditionally create a section header string
       table.  Maybe some weird tool created an ELF file without one.
-@@ -576,7 +581,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -593,7 +598,7 @@ handle_elf (int fd, Elf *elf, const char
      {
        /* This should always be true (i.e., there should not be any
         holes in the numbering).  */
@@ -1423,7 +1525,7 @@
  
        shdr_info[cnt].scn = scn;
  
-@@ -589,6 +594,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -606,6 +611,7 @@ handle_elf (int fd, Elf *elf, const char
                                        shdr_info[cnt].shdr.sh_name);
        if (shdr_info[cnt].name == NULL)
        {
@@ -1431,7 +1533,7 @@
          error (0, 0, gettext ("illformed file '%s'"), fname);
          goto fail_close;
        }
-@@ -598,6 +604,8 @@ handle_elf (int fd, Elf *elf, const char
+@@ -615,6 +621,8 @@ handle_elf (int fd, Elf *elf, const char
  
        /* Remember the shdr.sh_link value.  */
        shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link;
@@ -1440,7 +1542,7 @@
  
        /* Sections in files other than relocatable object files which
         are not loaded can be freely moved by us.  In relocatable
-@@ -610,7 +618,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -627,7 +635,7 @@ handle_elf (int fd, Elf *elf, const char
         appropriate reference.  */
        if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX))
        {
@@ -1449,7 +1551,7 @@
          shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt;
        }
        else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP))
-@@ -627,7 +635,12 @@ handle_elf (int fd, Elf *elf, const char
+@@ -644,7 +652,12 @@ handle_elf (int fd, Elf *elf, const char
          for (inner = 1;
               inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word);
               ++inner)
@@ -1462,7 +1564,7 @@
  
          if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0))
            /* If the section group contains only one element and this
-@@ -638,7 +651,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -655,7 +668,7 @@ handle_elf (int fd, Elf *elf, const char
        }
        else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym))
        {
@@ -1471,7 +1573,7 @@
          shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt;
        }
  
-@@ -646,7 +659,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -663,7 +676,7 @@ handle_elf (int fd, Elf *elf, const char
         discarded right away.  */
        if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0)
        {
@@ -1480,7 +1582,7 @@
  
          if (shdr_info[shdr_info[cnt].group_idx].idx == 0)
            {
-@@ -722,11 +735,15 @@ handle_elf (int fd, Elf *elf, const char
+@@ -739,10 +752,14 @@ handle_elf (int fd, Elf *elf, const char
            {
              /* If a relocation section is marked as being removed make
                 sure the section it is relocating is removed, too.  */
@@ -1488,17 +1590,17 @@
 +            if (shdr_info[cnt].shdr.sh_type == SHT_REL
                   || shdr_info[cnt].shdr.sh_type == SHT_RELA)
 -                && shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0)
+-              shdr_info[cnt].idx = 1;
 +              {
 +                if (shdr_info[cnt].shdr.sh_info >= shnum)
 +                  goto illformed;
 +                else if (shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0)
-               shdr_info[cnt].idx = 1;
-           }
-+          }
++                  shdr_info[cnt].idx = 1;
++              }
  
-         if (shdr_info[cnt].idx == 1)
-           {
-@@ -753,7 +770,7 @@ handle_elf (int fd, Elf *elf, const char
+             /* If a group section is marked as being removed make
+                sure all the sections it contains are being removed, too.  */
+@@ -786,7 +803,7 @@ handle_elf (int fd, Elf *elf, const char
                  if (shdr_info[cnt].symtab_idx != 0
                      && shdr_info[shdr_info[cnt].symtab_idx].data == NULL)
                    {
@@ -1507,7 +1609,7 @@
  
                      shdr_info[shdr_info[cnt].symtab_idx].data
                        = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn,
-@@ -793,6 +810,9 @@ handle_elf (int fd, Elf *elf, const char
+@@ -826,6 +843,9 @@ handle_elf (int fd, Elf *elf, const char
                      else if (scnidx == SHN_XINDEX)
                        scnidx = xndx;
  
@@ -1517,7 +1619,7 @@
                      if (shdr_info[scnidx].idx == 0)
                        /* This symbol table has a real symbol in
                           a discarded section.  So preserve the
-@@ -823,12 +843,16 @@ handle_elf (int fd, Elf *elf, const char
+@@ -856,12 +876,16 @@ handle_elf (int fd, Elf *elf, const char
                }
  
              /* Handle references through sh_info.  */
@@ -1536,7 +1638,7 @@
  
              /* Mark the section as investigated.  */
              shdr_info[cnt].idx = 2;
-@@ -967,7 +991,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1002,7 +1026,7 @@ handle_elf (int fd, Elf *elf, const char
          error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"),
                 elf_errmsg (-1));
  
@@ -1545,7 +1647,7 @@
  
        /* Add this name to the section header string table.  */
        shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0);
-@@ -1004,7 +1028,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1039,7 +1063,7 @@ handle_elf (int fd, Elf *elf, const char
        error (EXIT_FAILURE, 0,
               gettext ("while create section header section: %s"),
               elf_errmsg (-1));
@@ -1554,7 +1656,7 @@
  
        shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn);
        if (shdr_info[cnt].data == NULL)
-@@ -1060,7 +1084,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1095,7 +1119,7 @@ handle_elf (int fd, Elf *elf, const char
      error (EXIT_FAILURE, 0,
           gettext ("while create section header section: %s"),
           elf_errmsg (-1));
@@ -1563,7 +1665,7 @@
  
    /* Finalize the string table and fill in the correct indices in the
       section headers.  */
-@@ -1150,20 +1174,20 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1185,20 +1209,20 @@ handle_elf (int fd, Elf *elf, const char
                    shndxdata = elf_getdata 
(shdr_info[shdr_info[cnt].symtab_idx].scn,
                                             NULL);
  
@@ -1587,7 +1689,7 @@
                            >= shdr_info[cnt].data->d_size / elsize);
                  }
  
-@@ -1218,7 +1242,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1253,7 +1277,7 @@ handle_elf (int fd, Elf *elf, const char
                      sec = shdr_info[sym->st_shndx].idx;
                    else
                      {
@@ -1596,7 +1698,7 @@
  
                        sec = shdr_info[xshndx].idx;
                      }
-@@ -1239,7 +1263,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1274,7 +1298,7 @@ handle_elf (int fd, Elf *elf, const char
                            nxshndx = sec;
                          }
  
@@ -1605,16 +1707,22 @@
  
                        if ((inner != destidx || nshndx != sym->st_shndx
                             || (shndxdata != NULL && nxshndx != xshndx))
-@@ -1263,7 +1287,7 @@ handle_elf (int fd, Elf *elf, const char
-                            || shdr_info[cnt].debug_data == NULL)
-                     /* This is a section symbol for a section which has
-                        been removed.  */
--                    assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION);
-+                    elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION);
+@@ -1301,9 +1325,11 @@ handle_elf (int fd, Elf *elf, const char
+                     {
+                       size_t sidx = (sym->st_shndx != SHN_XINDEX
+                                       ? sym->st_shndx : xshndx);
+-                      assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION
+-                              || (shdr_info[sidx].shdr.sh_type == SHT_GROUP
+-                                  && shdr_info[sidx].shdr.sh_info == inner));
++                      elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION
++                                  || ((shdr_info[sidx].shdr.sh_type
++                                       == SHT_GROUP)
++                                      && (shdr_info[sidx].shdr.sh_info
++                                          == inner)));
+                     }
                  }
  
-               if (destidx != inner)
-@@ -1450,11 +1474,11 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1491,11 +1517,11 @@ handle_elf (int fd, Elf *elf, const char
                  {
                    GElf_Sym sym_mem;
                    GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);
@@ -1628,16 +1736,18 @@
                    size_t hidx = elf_hash (name) % nbucket;
  
                    if (bucket[hidx] == 0)
-@@ -1473,7 +1497,7 @@ handle_elf (int fd, Elf *elf, const char
+@@ -1514,8 +1540,8 @@ handle_elf (int fd, Elf *elf, const char
            else
              {
                /* Alpha and S390 64-bit use 64-bit SHT_HASH entries.  */
 -              assert (shdr_info[cnt].shdr.sh_entsize
+-                      == sizeof (Elf64_Xword));
 +              elf_assert (shdr_info[cnt].shdr.sh_entsize
-                       == sizeof (Elf64_Xword));
++                            == sizeof (Elf64_Xword));
  
                Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf;
-@@ -1504,11 +1528,11 @@ handle_elf (int fd, Elf *elf, const char
+ 
+@@ -1545,11 +1571,11 @@ handle_elf (int fd, Elf *elf, const char
                  {
                    GElf_Sym sym_mem;
                    GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to