[ros-dev] [ros-diffs] [dchapyshev] 42012: - Samplify SwitchToThread and QueueUserWorkItem - Remove unneeded InternalWorkItemTrampoline function and QUEUE_USER_WORKITEM_CONTEXT structure - Other small changes

Thomas Bluemel thomas at reactsoft.com
Wed Jul 22 17:08:53 CEST 2009


Alex Ionescu wrote:
> All architectures have an ABI that defines which registers are used for 
> return values, and so the compiler will NEVER (under ANY circumstances) 
> assume that the return register should somehow be "usable", especially 
> for an external function pointer!

Like I said I don't know if any "real-world" architecture depends on 
this.  I can however make up my own instruction set where it does matter.

> Furthermore, this is typecasting from a ULONG to a VOID, isn't it? So 
> the "real" function will never return anything in the first place, 
> making this a non-issue.

It's not a typecast of a return value, it's a typecast of a pointer to a 
function with an incompatible function signature.  It's like passing a 
callback function with 1 argument to a routine that expects a callback 
with 2 arguments.  Except that in this instance it would most likely 
cause trouble on most architectures immediately.  However, it's no 
different from the problem I described, except that it happens to be not 
much of an issue on x86.

> I challenge you to provide a test case/example on any architecture where 
> this could possibly happen. It can't.

If I had the time I would be more than happy to come up with a new 
architecture where it does make a difference.

It doesn't change the fact that it's a non-portable hack.

- Thomas


More information about the Ros-dev mailing list