gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gcl-devel] Re: (object (*)()) vs (long (*)())


From: Richard Zidlicky
Subject: [Gcl-devel] Re: (object (*)()) vs (long (*)())
Date: Wed, 31 Jul 2002 22:46:26 +0200
User-agent: Mutt/1.2.5i

On Wed, Jul 31, 2002 at 02:51:25PM +0200, Andreas Schwab wrote:

> |> Function return values must be declared (and used) properly on m68k, 
> |> pointer values are returned in reg a0, ints d0. I would be surprised
> |> if m68k was the only arch that gets broken by this..
> 
> Actually, this should not be a problem, because functions returning a
> pointer put the return value in both registers, to support broken
> programs.

it is still possible to run into trouble by scrweing it up the other
way round: write a function that returns int and call it with a cast 
to a pointer-returning function. 
The compiler must expect the return value in a0 but int-returning 
functions don't do that.
Broken beyond imagination but I have seen software doing this.

> |> expecting 'long' result from pointer-returning functions would work
> |> as long as you don't use -fomit-frame-pointer but is a horrible hack.
> 
> I don't think that -fomit-frame-pointer has any influence on this, but if
> it does, then only by chance.

it has, the code to generate the extra a0->d0 move is in 
FUNCTION_EXTRA_EPILOGUE which gets omitted with -fomit-frame-pointer

Richard



reply via email to

[Prev in Thread] Current Thread [Next in Thread]