[AIX] Memory error while checking if pointer is descriptor.
authorJoel Brobecker <brobecker@gnat.com>
Tue, 20 Apr 2010 22:38:54 +0000 (22:38 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 20 Apr 2010 22:38:54 +0000 (22:38 +0000)
commit2971b56ba623542a0232473f110922758588fe2c
treeeb2b11cd92c97f976a6f09eb7fe31c7a2eb17244
parentbe9425454f2d15a1c2512faa81de8777731aa4af
[AIX] Memory error while checking if pointer is descriptor.

A long time ago (Oct 2009), I noticed a problem on AIX, where something
failed with an error while the debugger was checking whether an address
was a descriptor or not.  Unfortunately, like an idiot, I forgot to write
notes about the scenario where the problem occured - I am usually pretty
meticulous about that because my memory of these things is really bad.
I hope you'll forgive me for not providing a solid testcase - if it's
any consolation, I've searched for a long time before giving up :-(.

Based on the testsuite reports that I have, I think that this happened
while inserting a breakpoint, as follow:

    (gdb) break x
    Cannot access memory at address 0x200093b4

What happened is that rs6000_convert_from_func_ptr_addr tried to read
the memory at the given address, and fail because of an exception.
It seems pretty clear that, if the address was in fact a descriptor,
GDB would have been able to read the target memory region.

So this patch protects the memory-read against exceptions, and treats
such exceptions as an indication that our address is not a descriptor.

gdb/ChangeLog:

        * rs6000-aix-tdep.c: #include exceptions.h.
        (rs6000_convert_from_func_ptr_addr): If an exception is thrown
        while reading the memory at ADDR, then ADDR cannot be a function
        descriptor.
gdb/ChangeLog
gdb/rs6000-aix-tdep.c