From: Peter Schauer <peterschauer@gmx.net>
To: brobecker@adacore.com (Joel Brobecker)
Cc: palves@redhat.com (Pedro Alves),
gdb-patches@sourceware.org (GDB Patches)
Subject: Re: eliminate deprecated_insert_raw_breakpoint. what's left.
Date: Tue, 09 Sep 2014 00:16:00 -0000 [thread overview]
Message-ID: <201409090016.s890G2eg007026@licht.localdomain> (raw)
In-Reply-To: <20140908213427.GF28404@adacore.com> from "Joel Brobecker" at Sep 08, 2014 02:34:27 PM
>
> > > This is AIX code. Looks like this can easily be converted to a
> > > momentary breakpoint?
> >
> > I am actually wondering whether this is still needed. It could!
> > So, the first thing I wanted to do was to run the testsuite without.
> > I'm currently building GDB, which is taking forever, and will then
> > run AdaCore's testsuite.
>
> Looking at the code, it should be executed each time the SP register
> gets changed, which means it should trigger when calling functions
> from GDB. Deactivating exec_one_dummy_insn entirely did not result
> in any regression I could notice. That was on AIX 7.1.
>
> That being said, I'm hesitant of removing the code regardless,
> since this could only be needed in specific situations which might
> not be covered by the testsuites we have.
>
> I was looking at how to replace that call, but I am not sure
> how to fix the code up, though. Perhaps we could just write
> the breakpoint instruction in by hand, rather than go through
> the breakpoint module? After all, it is already doing almost
> everything else by hand!
>
> In fact, looking at the code again now, I'm a little more tempted
> to see what happens if we remove it ;-).
I hope to be able to shed some light on this problem, although it
is more than fifteen years ago that I did some work for GDB on AIX.
From my notes back then, AIX 3 and AIX 4 had a very peculiar ptrace
implementation, where the current ptrace state of the inferior process
(including the current process registers) was maintained approximately
512 bytes below the current user stack pointer of the process.
This resulted in problems with AIX inferior function calls.
If the called function takes one or more large aggregate parameters
by value, or if you pass a large amount of parameters, the ptrace
area gets corrupted, when the dummy function call parameters are
pushed on the user stack, due to this awkward AIX stack layout.
To work around this problem, the execution of a dummy instruction
(when altering the stack pointer) caused the kernel to move the ptrace
state area further below on the user stack, allowing GDB to write below
the current user stack safely.
In GDB 6.x, rs6000_push_dummy_call even secured the stack partially during
pushing of the arguments, via an additional call of
regcache_raw_write_signed to gdbarch_sp_regnum (gdbarch), which is
no longer present in current versions of GDB.
Executing the dummy instruction is very fragile, especially if signals
get involved during the execution, and it didn't even help, if more
than ~100 bytes of parameters were pushed on the user stack on AIX 4.
Back then, there was no other choice though.
Unfortunately I do not know, if this peculiar AIX stack layout is still
used in AIX 5 or later, maybe Ulrich Weigand could tell you more about it.
I think you could/should zap exec_one_dummy_insn, provided that you test
a dummy function call on the oldest AIX version that GDB has to support,
with a large aggregate parameter, which is passed by value.
--
Peter Schauer Peter.Schauer@mytum.de
next prev parent reply other threads:[~2014-09-09 0:16 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-08 17:46 Pedro Alves
2014-09-08 19:24 ` Joel Brobecker
2014-09-08 21:34 ` Joel Brobecker
2014-09-08 22:50 ` Pedro Alves
2014-09-09 0:25 ` Peter Schauer
2014-09-09 0:16 ` Peter Schauer [this message]
2014-09-09 11:39 ` Ulrich Weigand
2014-09-09 12:38 ` Peter Schauer
2014-09-09 21:25 ` Ulrich Weigand
2014-09-10 12:21 ` Joel Brobecker
2014-09-10 13:15 ` Ulrich Weigand
2014-09-10 15:22 ` Pedro Alves
2014-09-09 21:48 ` Ulrich Weigand
2014-09-10 12:29 ` Joel Brobecker
2014-09-10 14:45 ` Ulrich Weigand
2014-09-10 15:21 ` Pedro Alves
2014-09-10 15:50 ` Maciej W. Rozycki
2014-09-10 16:12 ` [IRIX] eliminate deprecated_insert_raw_breakpoint uses Pedro Alves
2014-09-10 22:44 ` Joel Brobecker
2014-09-10 23:02 ` Pedro Alves
2014-09-11 3:27 ` Joel Brobecker
2014-09-12 19:34 ` Pedro Alves
2014-09-12 20:23 ` Joel Brobecker
2014-09-10 15:50 ` eliminate deprecated_insert_raw_breakpoint. what's left Joel Brobecker
2014-09-10 16:00 ` Sergio Durigan Junior
2014-09-10 16:36 ` Ulrich Weigand
2014-09-10 18:59 ` New deprecation procedure Pedro Alves
2014-09-11 19:03 ` Joel Brobecker
2014-09-12 8:51 ` Ulrich Weigand
2014-10-07 0:25 ` eliminate deprecated_insert_raw_breakpoint. what's left Stan Shebs
2014-09-09 17:33 ` Pedro Alves
[not found] <alpine.DEB.1.10.1409101553070.27075@tp.orcam.me.uk>
2014-09-10 16:45 ` Ulrich Weigand
2014-09-10 19:11 ` Maciej W. Rozycki
2014-09-11 11:50 ` Ulrich Weigand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201409090016.s890G2eg007026@licht.localdomain \
--to=peterschauer@gmx.net \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox