diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 1993-10-05 19:44:57 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 1993-10-05 19:44:57 +0000 |
commit | cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4 (patch) | |
tree | 89bc0058548c4a5ef634989a13e0a9ce0f51e3a0 /gdb/blockframe.c | |
parent | a72e9833652c3a2e3c616b75522f7dfb462533e6 (diff) | |
download | gdb-cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4.zip gdb-cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4.tar.gz gdb-cef4c2e7a5f2d3426a8255f74b6c7f4e795fd9a4.tar.bz2 |
Changes to support alpha OSF/1 in native mode.
* alpha-nat.c, alpha-tdep.c, config/alpha/alpha-osf1.mt,
config/alpha/nm-alpha.h, config/alpha/tm-alpha.h, osfsolib.c:
New files.
* Makefile.in: Add new files and dependencies.
* configure.in: Add alpha target.
* config/alpha/alpha-osf1.mh (NATDEPFILES): Add osfsolib.o
* config/alpha/alpha-osf1.mh (MH_CFLAGS): Remove, we can handle
shared libraries now.
* config/alpha/xm-alpha.h: Cleanup, get MAKEVA_* defines right.
* defs.h (CORE_ADDR): Make its type overridable via CORE_ADDR_TYPE,
provide `unsigned int' default.
* breakpoint.c (breakpoint_auto_delete): Delete only if we really
stopped for the breakpoint.
* stabsread.c, stabsread.h (define_symbol): Change valu parameter
to a CORE_ADDR.
* stabsread.c (read_range_type): Handle the case where the lower
bound overflows and the upper doesn't and the range is legal.
* infrun.c (resume): Do not step a breakpoint instruction if
CANNOT_STEP_BREAKPOINT is defined.
* inferior.h (CALL_DUMMY_LOCATION): New variant AT_ENTRY_POINT.
Now that we have the bp_call_dummy breakpoint the call dummy code
is no longer needed. PUSH_DUMMY_FRAME, PUSH_ARGUMENTS and
FIX_CALL_DUMMY can be used to set up everything for the dummy.
The breakpoint for the dummy is set at the entry point and thats it.
* blockframe.c (inside_entry_file, inside_entry_func): Do not stop
backtraces if pc is in the call dummy at the entry point.
* infcmd.c (run_stack_dummy): Handle AT_ENTRY_POINT case. Use
the expected breakpoint pc when setting up the frame for
set_momentary_breakpoint.
* symfile.c (entry_point_address): New function for AT_ENTRY_POINT
support.
* valops.c (call_function_by_hand): Handle AT_ENTRY_POINT case.
Diffstat (limited to 'gdb/blockframe.c')
-rw-r--r-- | gdb/blockframe.c | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/gdb/blockframe.c b/gdb/blockframe.c index a61face..7acbf6a 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -45,6 +45,12 @@ inside_entry_file (addr) return 1; if (symfile_objfile == 0) return 0; +#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT + /* Do not stop backtracing if the pc is in the call dummy + at the entry point. */ + if (PC_IN_CALL_DUMMY (addr, 0, 0)) + return 0; +#endif return (addr >= symfile_objfile -> ei.entry_file_lowpc && addr < symfile_objfile -> ei.entry_file_highpc); } @@ -85,6 +91,12 @@ CORE_ADDR pc; return 1; if (symfile_objfile == 0) return 0; +#if CALL_DUMMY_LOCATION == AT_ENTRY_POINT + /* Do not stop backtracing if the pc is in the call dummy + at the entry point. */ + if (PC_IN_CALL_DUMMY (pc, 0, 0)) + return 0; +#endif return (symfile_objfile -> ei.entry_func_lowpc <= pc && symfile_objfile -> ei.entry_func_highpc > pc); } @@ -653,23 +665,26 @@ find_pc_partial_function (pc, name, address, endaddr) goto return_cached_value; } } - - /* Now that static symbols go in the minimal symbol table, perhaps - we could just ignore the partial symbols. But at least for now - we use the partial or minimal symbol, whichever is larger. */ - psb = find_pc_psymbol (pst, pc); - - if (psb - && (msymbol == NULL || - (SYMBOL_VALUE_ADDRESS (psb) >= SYMBOL_VALUE_ADDRESS (msymbol)))) + else { - /* This case isn't being cached currently. */ - if (address) - *address = SYMBOL_VALUE_ADDRESS (psb); - if (name) - *name = SYMBOL_NAME (psb); - /* endaddr non-NULL can't happen here. */ - return 1; + /* Now that static symbols go in the minimal symbol table, perhaps + we could just ignore the partial symbols. But at least for now + we use the partial or minimal symbol, whichever is larger. */ + psb = find_pc_psymbol (pst, pc); + + if (psb + && (msymbol == NULL || + (SYMBOL_VALUE_ADDRESS (psb) + >= SYMBOL_VALUE_ADDRESS (msymbol)))) + { + /* This case isn't being cached currently. */ + if (address) + *address = SYMBOL_VALUE_ADDRESS (psb); + if (name) + *name = SYMBOL_NAME (psb); + /* endaddr non-NULL can't happen here. */ + return 1; + } } } |