* elfread.c (elf_symtab_read): Do not use udata.p here to find
symbol size. * ppc64-tdep.c (ppc64_elf_make_msymbol_special): New function. * ppc64-tdep.h (ppc64_elf_make_msymbol_special): Declare. * ppc-linux-tdep.c (ppc_linux_init_abi): Set up to use the above. * ppcfbsd-tdep.c (ppcfbsd_init_abi): Likewise.
This commit is contained in:
parent
d38b600c90
commit
24c274a133
@ -1,3 +1,12 @@
|
||||
2013-02-23 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elfread.c (elf_symtab_read): Do not use udata.p here to find
|
||||
symbol size.
|
||||
* ppc64-tdep.c (ppc64_elf_make_msymbol_special): New function.
|
||||
* ppc64-tdep.h (ppc64_elf_make_msymbol_special): Declare.
|
||||
* ppc-linux-tdep.c (ppc_linux_init_abi): Set up to use the above.
|
||||
* ppcfbsd-tdep.c (ppcfbsd_init_abi): Likewise.
|
||||
|
||||
2013-02-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Code cleanup.
|
||||
|
@ -556,21 +556,14 @@ elf_symtab_read (struct objfile *objfile, int type,
|
||||
|
||||
if (msym)
|
||||
{
|
||||
/* Pass symbol size field in via BFD. FIXME!!! */
|
||||
elf_symbol_type *elf_sym;
|
||||
|
||||
/* NOTE: uweigand-20071112: A synthetic symbol does not have an
|
||||
ELF-private part. However, in some cases (e.g. synthetic
|
||||
'dot' symbols on ppc64) the udata.p entry is set to point back
|
||||
to the original ELF symbol it was derived from. Get the size
|
||||
from that symbol. */
|
||||
ELF-private part. */
|
||||
if (type != ST_SYNTHETIC)
|
||||
elf_sym = (elf_symbol_type *) sym;
|
||||
else
|
||||
elf_sym = (elf_symbol_type *) sym->udata.p;
|
||||
|
||||
if (elf_sym)
|
||||
SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
|
||||
{
|
||||
/* Pass symbol size field in via BFD. FIXME!!! */
|
||||
elf_symbol_type *elf_sym = (elf_symbol_type *) sym;
|
||||
SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
|
||||
}
|
||||
|
||||
msym->filename = filesymname;
|
||||
gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
|
||||
|
@ -1336,6 +1336,9 @@ ppc_linux_init_abi (struct gdbarch_info info,
|
||||
set_gdbarch_convert_from_func_ptr_addr
|
||||
(gdbarch, ppc64_convert_from_func_ptr_addr);
|
||||
|
||||
set_gdbarch_elf_make_msymbol_special (gdbarch,
|
||||
ppc64_elf_make_msymbol_special);
|
||||
|
||||
/* Shared library handling. */
|
||||
set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "gdbcore.h"
|
||||
#include "ppc-tdep.h"
|
||||
#include "ppc64-tdep.h"
|
||||
#include "elf-bfd.h"
|
||||
|
||||
/* Macros for matching instructions. Note that, since all the
|
||||
operands are masked off before they're or-ed into the instruction,
|
||||
@ -361,3 +362,17 @@ ppc64_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
/* A synthetic 'dot' symbols on ppc64 has the udata.p entry pointing
|
||||
back to the original ELF symbol it was derived from. Get the size
|
||||
from that symbol. */
|
||||
|
||||
void
|
||||
ppc64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
|
||||
{
|
||||
if ((sym->flags & BSF_SYNTHETIC) != 0 && sym->udata.p != NULL)
|
||||
{
|
||||
elf_symbol_type *elf_sym = (elf_symbol_type *) sym->udata.p;
|
||||
SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
|
||||
}
|
||||
}
|
||||
|
@ -31,4 +31,6 @@ extern CORE_ADDR ppc64_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
|
||||
CORE_ADDR addr,
|
||||
struct target_ops *targ);
|
||||
|
||||
extern void ppc64_elf_make_msymbol_special (asymbol *,
|
||||
struct minimal_symbol *);
|
||||
#endif /* PPC64_TDEP_H */
|
||||
|
@ -325,6 +325,9 @@ ppcfbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||
{
|
||||
set_gdbarch_convert_from_func_ptr_addr
|
||||
(gdbarch, ppc64_convert_from_func_ptr_addr);
|
||||
set_gdbarch_elf_make_msymbol_special (gdbarch,
|
||||
ppc64_elf_make_msymbol_special);
|
||||
|
||||
set_gdbarch_skip_trampoline_code (gdbarch, ppc64_skip_trampoline_code);
|
||||
set_solib_svr4_fetch_link_map_offsets (gdbarch,
|
||||
svr4_lp64_fetch_link_map_offsets);
|
||||
|
Loading…
x
Reference in New Issue
Block a user