This is the mail archive of the gdb-patches@sources.redhat.com 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]

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


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".




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]