diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2002-01-22 11:22:23 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2002-01-22 11:22:23 +0000 |
commit | 211a4f6935ec134a9cf6c78522f15a48b5f7b258 (patch) | |
tree | 3634dfba1956a919f017cb1438b90c7c63801b7e /gdb | |
parent | f304919d26670c36cf28501804cc6822c092c0a7 (diff) | |
download | gdb-211a4f6935ec134a9cf6c78522f15a48b5f7b258.zip gdb-211a4f6935ec134a9cf6c78522f15a48b5f7b258.tar.gz gdb-211a4f6935ec134a9cf6c78522f15a48b5f7b258.tar.bz2 |
* xstormy16-tdep.c (xstormy16_scan_prologue): Add frameless
parameter. Set frameless flag if it exists and depended of
whether the scanned function is frameless or not.
(xstormy16_skip_prologue): If function is frameless, return
result of xstormy16_scan_prologue().
(xstormy16_frame_init_saved_regs): Adjust xstormy16_scan_prologue()
call.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/xstormy16-tdep.c | 23 |
2 files changed, 27 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b207d06..7347659 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2002-01-22 Corinna Vinschen <vinschen@redhat.com> + + * xstormy16-tdep.c (xstormy16_scan_prologue): Add frameless + parameter. Set frameless flag if it exists and depended of + whether the scanned function is frameless or not. + (xstormy16_skip_prologue): If function is frameless, return + result of xstormy16_scan_prologue(). + (xstormy16_frame_init_saved_regs): Adjust xstormy16_scan_prologue() + call. + 2002-01-21 Elena Zannoni <ezannoni@redhat.com> * sh-tdep.c (sh_fp_frame_init_saved_regs, sh_push_arguments, diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c index bfadc7b..918a19e 100644 --- a/gdb/xstormy16-tdep.c +++ b/gdb/xstormy16-tdep.c @@ -451,8 +451,8 @@ xstormy16_frame_saved_register (struct frame_info *fi, int regnum) */ static CORE_ADDR -xstormy16_scan_prologue (CORE_ADDR start_addr, - CORE_ADDR end_addr, struct frame_info *fi) +xstormy16_scan_prologue (CORE_ADDR start_addr, CORE_ADDR end_addr, + struct frame_info *fi, int *frameless) { CORE_ADDR sp = 0, fp = 0; CORE_ADDR next_addr; @@ -460,6 +460,8 @@ xstormy16_scan_prologue (CORE_ADDR start_addr, LONGEST offset; int regnum; + if (frameless) + *frameless = 1; if (fi) { /* In a call dummy, don't touch the frame. */ @@ -518,6 +520,8 @@ xstormy16_scan_prologue (CORE_ADDR start_addr, { if (fi) /* Record that the frame pointer is in use. */ fi->extra_info->frameless_p = 0; + if (frameless) + *frameless = 0; } /* optional copying of args in r2-r7 to r10-r13 */ @@ -633,11 +637,18 @@ xstormy16_skip_prologue (CORE_ADDR pc) struct symtab_and_line sal; struct symbol *sym; + /* Don't trust line number debug info in frameless functions. */ + int frameless = 1; + CORE_ADDR plg_end = xstormy16_scan_prologue (func_addr, func_end, + NULL, &frameless); + if (frameless) + return plg_end; + /* Found a function. */ sym = lookup_symbol (func_name, NULL, VAR_NAMESPACE, NULL, NULL); + /* Don't use line number debug info for assembly source files. */ if (sym && SYMBOL_LANGUAGE (sym) != language_asm) { - /* Don't use this trick for assembly source files. */ sal = find_pc_line (func_addr, 0); if (sal.end && sal.end < func_end) { @@ -645,8 +656,8 @@ xstormy16_skip_prologue (CORE_ADDR pc) return sal.end; } } - /* No useable line symbol. Use prologue parsing method. */ - return xstormy16_scan_prologue (func_addr, func_end, NULL); + /* No useable line symbol. Use result of prologue parsing method. */ + return plg_end; } /* No function symbol -- just return the PC. */ @@ -727,7 +738,7 @@ xstormy16_frame_init_saved_regs (struct frame_info *fi) /* Find the beginning of this function, so we can analyze its prologue. */ if (find_pc_partial_function (fi->pc, NULL, &func_addr, &func_end)) - xstormy16_scan_prologue (func_addr, fi->pc, fi); + xstormy16_scan_prologue (func_addr, fi->pc, fi, NULL); /* Else we're out of luck (can't debug completely stripped code). FIXME. */ } |