Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Sep 2008 14:26:59 -0400
From:      Lowell Gilbert <freebsd-bugs@be-well.ilk.org>
To:        stevefranks@ieee.org
Cc:        hackers@freebsd.org
Subject:   Re: proper types for printf()-ing pointers on amd64 that won't break
Message-ID:  <448wtpb98s.fsf@be-well.ilk.org>
In-Reply-To: <539c60b90809181041n658d2823y89e42bb0ccfa6d06@mail.gmail.com> (Steve Franks's message of "Thu\, 18 Sep 2008 10\:41\:42 -0700")
References:  <539c60b90809181041n658d2823y89e42bb0ccfa6d06@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
"Steve Franks" <stevefranks@ieee.org> writes:

> Hi,
>
> I'm trying to correct some warnings in a port marked
> ONLY_FOR_ARCHS=i386.  They stem from casting a pointer (which I assume
> is a 64-bit unsigned) to "unsigned int" which is apparently 32 bits?
> I sort of thought int was supposed to be the atomic register size, but
> no doubt that would break more than it would help, so it's 32-bits.
> Anyways, what's the right way to fix this?  The port actually works
> fine as-is on amd64, so I can only assume something was fixed for 7.1,
> or someone was being extra cautious with the i386 tag.
>
> The code:
>
>    typedef unsigned int cardinal;
>    ...
>    fprintf(stderr, "Mode Table Offset: $C0000 + $%x\n",
> ((cardinal)map->mode_table) - ((cardinal)map->bios_ptr));
>
> Can I just ditch the cast+%x and use %p?  I don't have an i386 system
> to test on, and I don't want to break anything if I submit a patch...

What is actually being printed isn't a pointer, but the difference
between two pointers (I assume from your comments; the code included
isn't enough to show where they come from).  That means the correct
type of what's being printed is size_t, which our printf seems to
support with a "z" modifier.  Removing the explicit casts or (if
necessary), replacing them with something that is big enough will also
be needed.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?448wtpb98s.fsf>