diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 1994-04-08 00:35:15 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 1994-04-08 00:35:15 +0000 |
commit | 2fe3b329f69ca294a8ad3f1f655df7db33a6eb65 (patch) | |
tree | fefcb0319a012188394786b5afbb0854b089d229 /gdb/minsyms.c | |
parent | 44c1515dc7eee69194750e926b954e15b09d0dff (diff) | |
download | gdb-2fe3b329f69ca294a8ad3f1f655df7db33a6eb65.zip gdb-2fe3b329f69ca294a8ad3f1f655df7db33a6eb65.tar.gz gdb-2fe3b329f69ca294a8ad3f1f655df7db33a6eb65.tar.bz2 |
* infrun.c (IN_SOLIB_TRAMPOLINE): Correct comment, trampolines
are in the .plt section.
* minsyms.c (lookup_solib_trampoline_symbol_by_pc,
find_solib_trampoline_target): New functions for handling
stepping into -g compiled shared libraries.
* symtab.h (lookup_solib_trampoline_symbol_by_pc,
find_solib_trampoline_target): Add prototypes.
* config/tm-sunos.h (IN_SOLIB_TRAMPOLINE, SKIP_TRAMPOLINE_CODE):
Define to handle stepping into -g compiled shared libraries.
* config/tm-sysv4.h (SKIP_TRAMPOLINE_CODE): Define to handle
stepping into -g compiled shared libraries.
* configure.in: Add mips-*-sysv4* support.
* config/mips/mipsv4.mh, config/mips/mipsv4.mt,
config/mips/tm-mipsv4.h, config/mips/xm-mipsv4.h, mipsv4-nat.c:
New files for MIPS SVR4 support.
* Makefile.in: Update for new mipsv4 files.
* alpha-tdep.c (heuristic_proc_desc, find_proc_desc): Use
read_next_frame_reg to obtain the frame relative stack pointer.
* mips-tdep.c (heuristic_proc_desc): Use read_next_frame_reg to
obtain the frame relative stack pointer.
* mdebugread.c (parse_partial_symbols, psymtab_to_symtab1):
Handle stStatic and stStaticProc symbols in stabs-in-ecoff output
by entering them into the minimal symbol table.
* printcmd.c (print_scalar_formatted): Do not try to unpack to
a long for float formats.
* solib.c: Include "elf/mips.h" only if DT_MIPS_RLD_MAP does not
get defined in <link.h>.
* solib.c (solib_add): Add shared library sections to the section
table of the target before adding the symbols.
* partial-stab.h: Relocate static and global functions.
* dbxread.c (read_dbx_symtab): Remove unused variable
end_of_text_address. Relocate text_addr when passing it
to end_psymtab.
For Alpha OSF/1 targets, enable gdb to set breakpoints in shared
library functions before the executable is run. Retrieve dynamic
symbols from stripped executables.
* mipsread.c (read_alphacoff_dynamic_symtab): New function.
* mipsread.c (mipscoff_symfile_read): Use it. Issue warning message
if no debugging symbols were found.
* alpha-tdep.c (alpha_skip_prologue): Silently return the unaltered
pc if memory at the pc is not accessible and GDB_TARGET_HAS_SHARED_LIBS
is defined.
* config/alpha/nm-alpha.h (GDB_TARGET_HAS_SHARED_LIBS): Define,
OSF/1 has shared libraries.
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r-- | gdb/minsyms.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 73562cb..fde97e9 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -601,3 +601,48 @@ install_minimal_symbols (objfile) } } +/* Check if PC is in a shared library trampoline code stub. + Return minimal symbol for the trampoline entry or NULL if PC is not + in a trampoline code stub. */ + +struct minimal_symbol * +lookup_solib_trampoline_symbol_by_pc (pc) + CORE_ADDR pc; +{ + struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc); + + if (msymbol != NULL && MSYMBOL_TYPE (msymbol) == mst_solib_trampoline) + return msymbol; + return NULL; +} + +/* If PC is in a shared library trampoline code stub, return the + address of the `real' function belonging to the stub. + Return 0 if PC is not in a trampoline code stub or if the real + function is not found in the minimal symbol table. + + We may fail to find the right function if a function with the + same name is defined in more than one shared library, but this + is considered bad programming style. We could return 0 if we find + a duplicate function in case this matters someday. */ + +CORE_ADDR +find_solib_trampoline_target (pc) + CORE_ADDR pc; +{ + struct objfile *objfile; + struct minimal_symbol *msymbol; + struct minimal_symbol *tsymbol = lookup_solib_trampoline_symbol_by_pc (pc); + + if (tsymbol != NULL) + { + ALL_MSYMBOLS (objfile, msymbol) + { + if (MSYMBOL_TYPE (msymbol) == mst_text + && STREQ (SYMBOL_NAME (msymbol), SYMBOL_NAME (tsymbol))) + return SYMBOL_VALUE_ADDRESS (msymbol); + } + } + return 0; +} + |