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
