This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Another long explaination for a small patch :-).
Trying to print the $pc register when the language is Ada trips
an assertion:
(gdb) start
Breakpoint 1 at 0x804950f: file foo.adb, line 4.
Starting program: /[...]/foo
foo () at foo.adb:4
4 end Foo;
(gdb) p /x $pc
../../src-public/gdb/regcache.c:164: internal-error: register_type: Assertion `regnum >= 0 && regnum < descr->nr_cooked_registers' failed.
[...]
This reproduces with any program, as long as the language is Ada.
The assertion occurs while doing the language->la_post_parser phase.
During that phase, we do some Ada-specific resolving of the expression,
during which we end up defering the resolution of our OP_REGISTER
node to evaluate_subexp_standard. The evaluation triggers the assertion
because the register number is beyond descr->nr_cooked_registers
when we try to find the register type.
We shouldn't even have tried to evaluate the OP_REGISTER expression
node. There is no reason that I can think of where an OP_REGISTER
node should be rewritten, so we can simply return immediately.
The attached patch fixes this.
2008-01-03 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (resolve_subexp): Add handling of OP_REGISTER
expressions. These expressions do not need to be rewriten.
I also wrote a little testcase.
2008-01-03 Joel Brobecker <brobecker@adacore.com>
* gdb.ada/print_pc.exp: New testcase.
All tested on x86-linux, no regression. Checked in.
PS: Now down to 29 failures!!! :-)
--
Joel
Attachment:
pc.diff
Description: Text document
Attachment:
pc-tc.diff
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |