RFC: cross-libkvm/libthread_db/proc_service

Bruce Evans brde at optusnet.com.au
Wed Jul 23 11:11:26 UTC 2008


On Wed, 23 Jul 2008, Bruce Evans wrote:

> On Mon, 21 Jul 2008, Alfred Perlstein wrote:
>
>> Isn't it a bit strange to export 64bit pointers to 32 bit userspace?
>
> Only for pointers in kernel objects, and I think the proposed change
> doesn't touch that.
>
> kvm_read() doesn't use pointers for kernel addresses.  It uses unsigned
> longs.  But even uintmax_t is not enough in general, since the application
> uintmax_t might be too small to represent a kernel pointer.  The type
> used shouldn't be fixed-width, but typedefed in an MD way like vm_offset_t.
> vm_offset_t gives the correct integral type to use for (mapped) kernel
> addresses and related compat_fewer_bit[s] type[s] are needed in userland.
> It would probably be too hard to support the general case which requires
> the compat types to be arrays or structs.

Bah, I forgot the original mail which already says to use an integral
type named psaddr_t, and that, unfortunately, this seems to need being
64 bits even on pure 32-bit systems in case you want to run an (not
quite pure) 32-bit application in compat32 mode on 64-bit system without
recompiling.  If psaddr_t is 32-bits on i386 but 64-bits on amd64, then
pure 32-bit i386 applications won't run in compat32 mode on amd64, though
(not quite pure) 32-bit applications compiled on amd64 will.  I don't like
putting 64-bit knowledge in 32-bit applications but I often compile on
i386 and run on amd64.

Bruce


More information about the freebsd-arch mailing list