diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-12 16:13:20 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-12 16:13:20 +0000 |
commit | 02dccc457f34b6671bbf4111c241987ac2d530e1 (patch) | |
tree | 57a5198b42de6988d67f0831c365ecbd59f2e891 /gdb/alpha-mdebug-tdep.c | |
parent | 4cad3596c59720dad4b99ec4eb3c63f1a80bfb94 (diff) | |
download | gdb-02dccc457f34b6671bbf4111c241987ac2d530e1.tar.gz |
* alpha-mdebug-tdep.c: Include "gdb_string.h".
(find_proc_desc): Add fix-up code for setjmp procedure descriptor.
* mdebugread.c (parse_procedure): Remove setjmp fix-up code.
* Makefile.in (alpha-mdebug-tdep.o): Update dependencies.
* config/alpha/alpha.mt (DEPRECATED_TM_FILE): Remove.
* config/alpha/alpha-linux.mt (DEPRECATED_TM_FILE): Remove.
* config/alpha/alpha-osf1.mt (DEPRECATED_TM_FILE): Remove.
* config/alpha/fbsd.mt (DEPRECATED_TM_FILE): Remove.
* config/alpha/tm-alpha.h: Remove file.
Diffstat (limited to 'gdb/alpha-mdebug-tdep.c')
-rw-r--r-- | gdb/alpha-mdebug-tdep.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c index ab2fb91abde..9c82ad16eba 100644 --- a/gdb/alpha-mdebug-tdep.c +++ b/gdb/alpha-mdebug-tdep.c @@ -25,6 +25,7 @@ #include "gdbcore.h" #include "block.h" #include "gdb_assert.h" +#include "gdb_string.h" #include "alpha-tdep.h" #include "mdebugread.h" @@ -95,11 +96,12 @@ find_proc_desc (CORE_ADDR pc) struct block *b = block_for_pc (pc); struct mdebug_extra_func_info *proc_desc = NULL; struct symbol *sym = NULL; + char *sh_name = NULL; if (b) { CORE_ADDR startaddr; - find_pc_partial_function (pc, NULL, &startaddr, NULL); + find_pc_partial_function (pc, &sh_name, &startaddr, NULL); if (startaddr > BLOCK_START (b)) /* This is the "pathological" case referred to in a comment in @@ -114,6 +116,16 @@ find_proc_desc (CORE_ADDR pc) { proc_desc = (struct mdebug_extra_func_info *) SYMBOL_VALUE (sym); + /* Correct incorrect setjmp procedure descriptor from the library + to make backtrace through setjmp work. */ + if (proc_desc->pdr.pcreg == 0 + && strcmp (sh_name, "setjmp") == 0) + { + proc_desc->pdr.pcreg = ALPHA_RA_REGNUM; + proc_desc->pdr.regmask = 0x80000000; + proc_desc->pdr.regoffset = -4; + } + /* If we never found a PDR for this function in symbol reading, then examine prologues to find the information. */ if (proc_desc->pdr.framereg == -1) |