This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH/i386newframe] Fix amd64 stack frame base address
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: Mark Kettenis <kettenis at chello dot nl>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Mon, 19 May 2003 13:15:09 -0400
- Subject: Re: [PATCH/i386newframe] Fix amd64 stack frame base address
- References: <200305191659.h4JGxcio001173@elgar.kettenis.dyndns.org>
Mark Kettenis writes:
> This makes the DWARF CFI and amd64 unwinders agree on what's the base
> of the stack frame.
>
> Comitted.
thanks! this fixes the assertion failure I was seeing. Running the
testsuite right now.
elena
>
> Mark
>
>
> Index: ChangeLog
> from Mark Kettenis <kettenis@gnu.org>
>
> * x86-64-tdep.c (x86_64_frame_this_id,
> x86_64_sigtramp_frame_this_id, x86_64_unwind_dummy_id): Add offset
> to the frame base such that we use the same defenition for the top
> of stack as DWARF CFI does.
>
> Index: x86-64-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/x86-64-tdep.c,v
> retrieving revision 1.67.2.4
> diff -u -p -r1.67.2.4 x86-64-tdep.c
> --- x86-64-tdep.c 18 May 2003 17:57:00 -0000 1.67.2.4
> +++ x86-64-tdep.c 19 May 2003 16:57:10 -0000
> @@ -966,7 +966,7 @@ x86_64_frame_this_id (struct frame_info
> if (inside_entry_file (cache->pc))
> return;
>
> - (*this_id) = frame_id_build (cache->base, cache->pc);
> + (*this_id) = frame_id_build (cache->base + 16, cache->pc);
> }
>
> static void
> @@ -1064,7 +1064,7 @@ x86_64_sigtramp_frame_this_id (struct fr
> struct x86_64_frame_cache *cache =
> x86_64_sigtramp_frame_cache (next_frame, this_cache);
>
> - (*this_id) = frame_id_build (cache->base, frame_pc_unwind (next_frame));
> + (*this_id) = frame_id_build (cache->base + 16, frame_pc_unwind (next_frame));
> }
>
> static void
> @@ -1133,7 +1133,7 @@ x86_64_unwind_dummy_id (struct gdbarch *
> frame_unwind_register (next_frame, X86_64_RBP_REGNUM, buf);
> fp = extract_unsigned_integer (buf, 8);
>
> - return frame_id_build (fp, frame_pc_unwind (next_frame));
> + return frame_id_build (fp + 16, frame_pc_unwind (next_frame));
> }
>
> void