Page MenuHomeFreeBSD

Make truss(8) work for i686-unknown-cloudabi binaries on FreeBSD/amd64.

Authored by ed on Dec 16 2017, 6:19 PM.



This change copies the existing amd64_cloudabi64.c to amd64_cloudabi32.c
and reimplements the functions for fetching system call arguments and
return values to use the same scheme as used by the vDSO that is used
when running cloudabi32 executables.

As arguments are automatically padded to 64-bit words by the vDSO in
userspace, we can copy the arguments directly into the array used by
truss(8) internally.

This change also has some changes for libsysdecode. These will be
committed separately. For libsysdecode, we add a new ABI type,
SYSDECODE_ABI_CLOUDABI32. We also remove all of the #ifdef bits, as
these are not needed. The cloudabi32 and cloudabi64 system call tables
and headers can be built on any FreeBSD architecture without any issues.

Test Plan

make universe seems to pass. Tracing 32-bit processes on FreeBSD/amd64
seems to work fine.

Diff Detail

rS FreeBSD src repository
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

ed created this revision.Dec 16 2017, 6:19 PM
jhb accepted this revision.Dec 16 2017, 6:32 PM

Looks good to me.

This revision is now accepted and ready to land.Dec 16 2017, 6:32 PM
This revision was automatically updated to reflect the committed changes.