This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: ping: [patch 2/2] Fix gdb.cp/gdb2495.exp regression with gcc-4.7 #5
- From: Joel Brobecker <brobecker at adacore dot com>
- To: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Cc: Mark Kettenis <kettenis at gnu dot org>, gdb-patches at sourceware dot org
- Date: Mon, 11 Jun 2012 08:24:28 -0700
- Subject: Re: ping: [patch 2/2] Fix gdb.cp/gdb2495.exp regression with gcc-4.7 #5
- References: <20120309210117.GB30432@host2.jankratochvil.net> <20120326190414.GB11001@host2.jankratochvil.net> <201203271853.q2RIrbWf024897@glazunov.sibelius.xs4all.nl>
Hi Jan,
> So the simplified version below is perfectly adequate. We have some
> freedom on where to place the breakpoint in the 16-byte stack gap we
> create. I chose to put it up hight such that a small buffer overflow
> isn't likely to overwrite the breakpoint instruction.
Just wanted to make sure that you'd be OK with Mark's version of
this part of your change... If that's the case, then all is good,
and as soon as part #1 is good to go, so should this one.
Thanks!
> Index: i386-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/i386-tdep.c,v
> retrieving revision 1.346
> diff -u -p -r1.346 i386-tdep.c
> --- i386-tdep.c 29 Feb 2012 14:59:41 -0000 1.346
> +++ i386-tdep.c 27 Mar 2012 18:30:24 -0000
> @@ -2327,6 +2327,21 @@ i386_16_byte_align_p (struct type *type)
> }
>
> static CORE_ADDR
> +i386_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
> + CORE_ADDR funcaddr,
> + struct value **args, int nargs,
> + struct type *value_type,
> + CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
> + struct regcache *regcache)
> +{
> + *bp_addr = sp - 1;
> + *real_pc = funcaddr;
> +
> + /* Keep the stack aligned. */
> + return sp - 16;
> +}
> +
> +static CORE_ADDR
> i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
> struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
> struct value **args, CORE_ADDR sp, int struct_return,
> @@ -7372,6 +7387,8 @@ i386_gdbarch_init (struct gdbarch_info i
> set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
>
> /* Call dummy code. */
> + set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
> + set_gdbarch_push_dummy_code(gdbarch, i386_push_dummy_code);
> set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
> set_gdbarch_frame_align (gdbarch, i386_frame_align);
>
--
Joel