[patch/rfc] Better handle "void f()" et.al. returns

Andrew Cagney ac131313@redhat.com
Wed Nov 19 16:27:00 GMT 2003


> Hello,
> 
> It turns out that how return values for a void function was handled was largely pot-luck.  PPC, for instance, treated it as "in register" while PPC64 treated it as "in memory".  Dependant on the choice (e.g., the latter), the mysterious message:
> 
>     (gdb) print foo()
>     Attempt to dereference a generic pointer.
>     (gdb)
> 
> would appear.  This patch cleans up the "return" (and "finish") code so that it better handles the edge cases:
> 
>     - function returning void
>     - function returning struct (old gdb architecture)
>     - function using struct convention
> 
> and at the same time prints more informative messages vis:
> 
> (gdb) return foo16
> The location at which to store the function's return value is unknown.
> If you continue, the return value that you specified will be ignored.
> Make fun16 return now? (y or n)
> 
> or
> 
> (gdb) return foo16
> A structure or union return type is not supported by this architecture.
> If you continue, the return value that you specified will be ignored.

I've checked this in.

Andrew


> 2003-11-17  Andrew Cagney  <cagney@redhat.com>
> 
> 	* stack.c (return_command): Handle "void", "legacy" and "unknown
> 	location" return values separatly.
> 	* values.c (using_struct_return): Return 0 for a "void" return
> 	type.  Mention "register_value_being_returned".
> 	(register_value_being_returned): Mention "using_struct_return".
> 




More information about the Gdb-patches mailing list