On Tue, Jul 14, 2015 at 1:03 PM, Ted Unangst <[email protected]> wrote:
> Raul Miller wrote:
>> J uses a hack where doubles are passed as long. This works on other
>> OSes but not on openbsd.
>
> This seems suspect. There's no guarantee double and long are the same size.

Certainly, they are not. So on 32 bit architectures, instead, 2 ints
are used to pass a double.

>> I was under the impression that gcc passes all values on the stack,
>> not in floating point registers or anything like that?
>
> This depends a lot on the CPU, but gcc on openbsd generally behaves the same
> as on any other OS with the same CPU.
>
>> I also wind up spending a fair amount of time in ld.so -- maybe I'll
>> be able to find my way through all the detail, but mostly I'm just as
>> lost using gdb as with any other approach.
>
> I doubt ld.so really has much to do with it.

I hope you are right. When debugging, though, it's hard to completely
exclude any possibility.

>> Basically, though, I don't know what I am looking for, so I don't know
>> how to tell when I am getting close to it.
>>
>> Does anyone know how I should approach this issue? (Is there anything
>> specific to OpenBSD which should be relevant here, or should I
>> strictly focus on gcc issues?)
>
> Looking at the disassembly for the stub code may help.
>
> It sounds like you may be missing a prototype somewhere and are getting
> implicit conversions.

hmm... that sounds plausible.

Thanks,

-- 
Raul

Reply via email to