Re: Formatting of function pointer value

Daniel Jacobowitz
2005-07-08T13:58:44Z

On Fri, Jul 08, 2005 at 12:00:44PM +0400, Vladimir Prus wrote:
>
> Hello,
> consider the following snippet:
>
> B* p2 = (B*)0x12345678;
> int (*p3)(int) = (fp)0x000000AE;
>
> the value of p2 is printed like this:
>
> (gdb)info local
> ....
> p2 = (B *) 0xb8000540
>
>
> the value of *p3 is printed like this:
>
> (gdb) print *p3
> $1 = {int (int)} 0xb7ee6e9c <__DTOR_END__+4>
>
> I have a couple of questions:
>
> 1. Why in both cases the type of value is printed? There's already 'whatis'
> command. I've checked that code and it's printed unconditionally. As the
> result, a GDB frontend must strip the type.

It is a feature, not a bug. Why is your frontend using the
command-line interface? DON'T do that! Use MI nowadays, please please
please.

The type is included because "print p2; $1 = 0x12345678" is very
uninformative; that's how we print integers, not pointers.

> 2. Why the type is enclosed in parenthesis in the first case, and in braces
> in the second case? This entails additonal problems for GUI frontend, for
> example, at the moment KDevelop thinks that the opening brace in the second
> case starts a composite.

Code addresses are treated specially. Same reason why you get a symbol
name, I expect...

--
Daniel Jacobowitz
CodeSourcery, LLC