Gentoo Archives: gentoo-commits

From: "Mike Frysinger (vapier)" <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-projects commit in pax-utils: scanelf.c
Date: Sun, 29 Apr 2012 06:21:46
Message-Id: 20120429062136.AE3D92004B@flycatcher.gentoo.org
1 vapier 12/04/29 06:21:36
2
3 Modified: scanelf.c
4 Log:
5 when looking for symbol sections, ignore ones labeled NOBITS as that means they dont have any actual data (like in split debug files) #411023 by Mark
6
7 Revision Changes Path
8 1.244 pax-utils/scanelf.c
9
10 file : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.244&view=markup
11 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.244&content-type=text/plain
12 diff : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?r1=1.243&r2=1.244
13
14 Index: scanelf.c
15 ===================================================================
16 RCS file: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v
17 retrieving revision 1.243
18 retrieving revision 1.244
19 diff -u -r1.243 -r1.244
20 --- scanelf.c 29 Apr 2012 05:41:14 -0000 1.243
21 +++ scanelf.c 29 Apr 2012 06:21:36 -0000 1.244
22 @@ -1,13 +1,13 @@
23 /*
24 * Copyright 2003-2007 Gentoo Foundation
25 * Distributed under the terms of the GNU General Public License v2
26 - * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.243 2012/04/29 05:41:14 vapier Exp $
27 + * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.244 2012/04/29 06:21:36 vapier Exp $
28 *
29 * Copyright 2003-2007 Ned Ludd - <solar@g.o>
30 * Copyright 2004-2007 Mike Frysinger - <vapier@g.o>
31 */
32
33 -static const char rcsid[] = "$Id: scanelf.c,v 1.243 2012/04/29 05:41:14 vapier Exp $";
34 +static const char rcsid[] = "$Id: scanelf.c,v 1.244 2012/04/29 06:21:36 vapier Exp $";
35 const char argv0[] = "scanelf";
36
37 #include "paxinc.h"
38 @@ -155,19 +155,35 @@
39 void *dynsym = elf_findsecbyname(elf, ".dynsym");
40 void *dynstr = elf_findsecbyname(elf, ".dynstr");
41
42 + /*
43 + * If the sections are marked NOBITS, then they don't exist, so we just
44 + * skip them. This let's us work sanely with splitdebug ELFs (rather
45 + * than spewing a lot of "corrupt ELF" messages later on). In malformed
46 + * ELFs, the section might be wrongly set to NOBITS, but screw em.
47 + */
48 #define GET_SYMTABS(B) \
49 if (elf->elf_class == ELFCLASS ## B) { \
50 - if (symtab && dynsym) { \
51 - Elf ## B ## _Shdr *esymtab = symtab; \
52 - Elf ## B ## _Shdr *edynsym = dynsym; \
53 + Elf ## B ## _Shdr *esymtab = symtab; \
54 + Elf ## B ## _Shdr *estrtab = strtab; \
55 + Elf ## B ## _Shdr *edynsym = dynsym; \
56 + Elf ## B ## _Shdr *edynstr = dynstr; \
57 + \
58 + if (symtab && EGET(esymtab->sh_type) == SHT_NOBITS) \
59 + symtab = NULL; \
60 + if (dynsym && EGET(edynsym->sh_type) == SHT_NOBITS) \
61 + dynsym = NULL; \
62 + if (symtab && dynsym) \
63 *sym = (EGET(esymtab->sh_size) > EGET(edynsym->sh_size)) ? symtab : dynsym; \
64 - } else \
65 + else \
66 *sym = symtab ? symtab : dynsym; \
67 - if (strtab && dynstr) { \
68 - Elf ## B ## _Shdr *estrtab = strtab; \
69 - Elf ## B ## _Shdr *edynstr = dynstr; \
70 + \
71 + if (strtab && EGET(estrtab->sh_type) == SHT_NOBITS) \
72 + strtab = NULL; \
73 + if (dynstr && EGET(edynstr->sh_type) == SHT_NOBITS) \
74 + dynstr = NULL; \
75 + if (strtab && dynstr) \
76 *str = (EGET(estrtab->sh_size) > EGET(edynstr->sh_size)) ? strtab : dynstr; \
77 - } else \
78 + else \
79 *str = strtab ? strtab : dynstr; \
80 }
81 GET_SYMTABS(32)