On 3/11/06, Goswin von Brederlow <[EMAIL PROTECTED]> wrote: > > $ gcc-3.3 -c -g -O -Wall t.c > > t.c: In function `foo': > > t.c:4: warning: implicit declaration of function `strdup' > > t.c:4: warning: return makes pointer from integer without a cast > > (all asm is from amd64) > > 0000000000400500 <foo>: > 400500: 48 83 ec 08 sub $0x8,%rsp > 400504: 31 c0 xor %eax,%eax > 400506: e8 d5 fe ff ff callq 4003e0 <[EMAIL PROTECTED]> > 40050b: 48 83 c4 08 add $0x8,%rsp > 40050f: 48 98 cltq > 400511: c3 retq > > The return value of strdup is passed back unaltered. No crash.
The context of this discussion was ia64, but I realize now that this probably wasn't obvious for debian-devel subscribers. I should have been clear about that. In any case, ia64 calling convention say that a 32-bit integer value in a (64-bit) register may contain garbage in the top 32 bits, hence the result from a function returning "int" will be sign- or zero-extended when converted to a 64-bit value, hence the crash. --david -- Mosberger Consulting LLC, http://www.mosberger-consulting.com/