This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: PATCH: readelf: Allow relocations against function symbols
On Thu, Mar 19, 2009 at 11:52:03AM +1030, Alan Modra wrote:
> On Wed, Mar 18, 2009 at 05:44:25PM -0700, H.J. Lu wrote:
> > * readelf.c (debug_apply_relocations): Allow relocations
> > against function symbols.
>
> OK. Or just test ELF_ST_TYPE (sym->st_info) > STT_SECTION
>
I am checking in this.
H.J.
----
2009-03-19 H.J. Lu <hongjiu.lu@intel.com>
* readelf.c (debug_apply_relocations): Check relocations
against STT_SECTION symbol.
--- ./readelf.c.foo 2009-03-19 07:36:53.000000000 -0700
+++ ./readelf.c 2009-03-19 07:39:19.000000000 -0700
@@ -8392,20 +8392,20 @@ debug_apply_relocations (void * file,
sym = symtab + get_reloc_symindex (rp->r_info);
/* If the reloc has a symbol associated with it,
- make sure that it is of an appropriate type. */
+ make sure that it is of an appropriate type.
+
+ Relocations against symbols without type can happen.
+ Gcc -feliminate-dwarf2-dups may generate symbols
+ without type for debug info.
+
+ Icc generates relocations against function symbols
+ instead of local labels.
+
+ Relocations against object symbols can happen, eg when
+ referencing a global array. For an example of this see
+ the _clz.o binary in libgcc.a. */
if (sym != symtab
- && ELF_ST_TYPE (sym->st_info) != STT_SECTION
- /* Relocations against symbols without type can happen.
- Gcc -feliminate-dwarf2-dups may generate symbols
- without type for debug info. */
- && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
- /* Icc generates relocations against function symbols
- instead of local labels. */
- && ELF_ST_TYPE (sym->st_info) != STT_FUNC
- /* Relocations against object symbols can happen,
- eg when referencing a global array. For an
- example of this see the _clz.o binary in libgcc.a. */
- && ELF_ST_TYPE (sym->st_info) != STT_OBJECT)
+ && ELF_ST_TYPE (sym->st_info) > STT_SECTION)
{
warn (_("skipping unexpected symbol type %s in %ld'th relocation in section %s\n"),
get_symbol_type (ELF_ST_TYPE (sym->st_info)),