mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 11:04:18 +08:00
* solib-svr4.c (bfd_lookup_symbol): New SECT_FLAGS argument.
(enable_break): Pass SEC_CODE as the SECT_FLAGS argument to bfd_lookup_symbol, since we only want symbols in code sections. (look_for_base): Pass zero as the SECT_FLAGS argument to bfd_lookup_symbol, since we're not concerned about which section the symbol is in.
This commit is contained in:
parent
102d615a7c
commit
87f84c9d11
@ -1,3 +1,12 @@
|
|||||||
|
2003-08-26 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
|
* solib-svr4.c (bfd_lookup_symbol): New SECT_FLAGS argument.
|
||||||
|
(enable_break): Pass SEC_CODE as the SECT_FLAGS argument to
|
||||||
|
bfd_lookup_symbol, since we only want symbols in code sections.
|
||||||
|
(look_for_base): Pass zero as the SECT_FLAGS argument to
|
||||||
|
bfd_lookup_symbol, since we're not concerned about which section
|
||||||
|
the symbol is in.
|
||||||
|
|
||||||
2003-08-26 Jeff Johnston <jjohnstn@redhat.com>
|
2003-08-26 Jeff Johnston <jjohnstn@redhat.com>
|
||||||
|
|
||||||
* ia64-tdep.c (examine_prologue): Only stop at predicated insns if
|
* ia64-tdep.c (examine_prologue): Only stop at predicated insns if
|
||||||
|
@ -177,7 +177,7 @@ static CORE_ADDR breakpoint_addr; /* Address where end bkpt is set */
|
|||||||
|
|
||||||
static int match_main (char *);
|
static int match_main (char *);
|
||||||
|
|
||||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
static CORE_ADDR bfd_lookup_symbol (bfd *, char *, flagword);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
|
||||||
CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname)
|
CORE_ADDR bfd_lookup_symbol (bfd *abfd, char *symname, flagword sect_flags)
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
|
||||||
@ -196,12 +196,15 @@ static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
|||||||
shared library support to find the address of the debugger
|
shared library support to find the address of the debugger
|
||||||
interface structures in the shared library.
|
interface structures in the shared library.
|
||||||
|
|
||||||
|
If SECT_FLAGS is non-zero, only match symbols in sections whose
|
||||||
|
flags include all those in SECT_FLAGS.
|
||||||
|
|
||||||
Note that 0 is specifically allowed as an error return (no
|
Note that 0 is specifically allowed as an error return (no
|
||||||
such symbol).
|
such symbol).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
bfd_lookup_symbol (bfd *abfd, char *symname)
|
bfd_lookup_symbol (bfd *abfd, char *symname, flagword sect_flags)
|
||||||
{
|
{
|
||||||
long storage_needed;
|
long storage_needed;
|
||||||
asymbol *sym;
|
asymbol *sym;
|
||||||
@ -222,7 +225,8 @@ bfd_lookup_symbol (bfd *abfd, char *symname)
|
|||||||
for (i = 0; i < number_of_symbols; i++)
|
for (i = 0; i < number_of_symbols; i++)
|
||||||
{
|
{
|
||||||
sym = *symbol_table++;
|
sym = *symbol_table++;
|
||||||
if (STREQ (sym->name, symname))
|
if (STREQ (sym->name, symname)
|
||||||
|
&& (sym->section->flags & sect_flags) == sect_flags)
|
||||||
{
|
{
|
||||||
/* Bfd symbols are section relative. */
|
/* Bfd symbols are section relative. */
|
||||||
symaddr = sym->value + sym->section->vma;
|
symaddr = sym->value + sym->section->vma;
|
||||||
@ -249,7 +253,9 @@ bfd_lookup_symbol (bfd *abfd, char *symname)
|
|||||||
for (i = 0; i < number_of_symbols; i++)
|
for (i = 0; i < number_of_symbols; i++)
|
||||||
{
|
{
|
||||||
sym = *symbol_table++;
|
sym = *symbol_table++;
|
||||||
if (STREQ (sym->name, symname))
|
|
||||||
|
if (STREQ (sym->name, symname)
|
||||||
|
&& (sym->section->flags & sect_flags) == sect_flags)
|
||||||
{
|
{
|
||||||
/* Bfd symbols are section relative. */
|
/* Bfd symbols are section relative. */
|
||||||
symaddr = sym->value + sym->section->vma;
|
symaddr = sym->value + sym->section->vma;
|
||||||
@ -355,7 +361,7 @@ look_for_base (int fd, CORE_ADDR baseaddr)
|
|||||||
|
|
||||||
for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++)
|
for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++)
|
||||||
{
|
{
|
||||||
address = bfd_lookup_symbol (interp_bfd, *symbolp);
|
address = bfd_lookup_symbol (interp_bfd, *symbolp, 0);
|
||||||
if (address != 0)
|
if (address != 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@ -1060,7 +1066,16 @@ enable_break (void)
|
|||||||
/* Now try to set a breakpoint in the dynamic linker. */
|
/* Now try to set a breakpoint in the dynamic linker. */
|
||||||
for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
|
for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
|
||||||
{
|
{
|
||||||
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
|
/* On ABI's that use function descriptors, there are usually
|
||||||
|
two linker symbols associated with each C function: one
|
||||||
|
pointing at the actual entry point of the machine code,
|
||||||
|
and one pointing at the function's descriptor. The
|
||||||
|
latter symbol has the same name as the C function.
|
||||||
|
|
||||||
|
What we're looking for here is the machine code entry
|
||||||
|
point, so we are only interested in symbols in code
|
||||||
|
sections. */
|
||||||
|
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, SEC_CODE);
|
||||||
if (sym_addr != 0)
|
if (sym_addr != 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user