Port-powerpc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: function calls from GDB on powerpc



when trying to call a function of the program being debugged from
within GDB on powerpc, you get:

read_register_bytes:  Couldn't update register 65.

After a little investigation, here are a few facts:

- register 65 is the msr.
- this error is triggered in findvar.c:read_register_bytes() when
  called with a REGISTER_BYTES argument (in order to load all the
  registers from the target, so the MSR is not specifically wanted).
- replacing the error by a warning (a printf) shows that register 65
  is the only register that is displayed as having problems.

Consequently, as the MSR is not used in my setup (and I don't think it
is widely used in gdb in "native" mode), I have removed the
above-mentioned error and can happily call functions from gdb.

Here are the possible correct fixes that come to my mind:

1) Change the name of register 65 to NULL or "" so that it is ignored
   by read_register_bytes() [requires changing stuff in rs6000 definitions]
2) Provide means to read the MSR with ptrace(2) [requires changing the
   kernel, powerpc/reg.h and ppcnbsd-nat.c]
3) Make up a correct (but fake) value for the MSR in ppcnbsd-nat.c

Suggest doing two things:

- down load a current GDB and see if the problem still occurs.
- assuming it does, hack around the problem with 3.

The way FSF GDB handles the above is very different to the code you're looking at.

Has anyone looked into this yet or plans to do so?

My preference goes to 3) because it is the least intrusive, and it
only impacts the "native" use of GDB.

... And 1) is a "no-no" IMHO and 2) seems quite useless.

 Aymeric

Andrew





Home | Main Index | Thread Index | Old Index