On Aug 21, 2013, at 11:57 AM, erik quanstrom <quans...@quanstro.net> wrote:

>> You're casting a large int into a small int and this seems right.
>> Just as (uchar)0x1234 => 0x34
>> 
>>> marshalling a 64-bit pointer in this way will lay down the
>>> bytes with the hi and lo reversed.
>> 
>> Perhaps you meant to do *(uchar*)&x?

Incidentally, on a little endian machine you'd still get
0xef out of 0x0123456789abcdefull!

> 
> you're right.  what was i thinking.  still, pointers are marshaled wrong.

> compiled on mips, this program
> 
> #include <u.h>
> #include <libc.h>
> 
> void
> main(void)
> {
>       char *p;
> 
>       p = malloc(100);
>       print("%p\n", p);
> }

> does this
> ; 6.crash
> 6.crash 203443: suicide: sys: trap: #SS pc=0x2048f2

How %p is treated is really upto the implementation but
it should not crash since p is never dereferenced. Does
this work?

        uintptr q;
        print("%p", q);





Reply via email to