Date: Tue, 20 Jul 2010 00:30:54 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: arch@freebsd.org Cc: amd64@freebsd.org Subject: uname -m/-p for compat32 binaries Message-ID: <20100719213054.GB2381@deviant.kiev.zoral.com.ua>
next in thread | raw e-mail | index | archive | help
--Cjvo8w+V8lMs5Jsv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi, I intend to commit the following change, that makes sysctls hw.machine_arch and hw.machine to return "i386" for 32 bit binaries run on amd64. In particular, 32 bit uname -m and uname -p print "i386", that is good for i386 jails on amd64 kernels. I find the change very useful for me, but I wonder why such trivial modification is not yet done. Can anybody note a possible fallout from it ? diff --git a/sys/amd64/amd64/identcpu.c b/sys/amd64/amd64/identcpu.c index 52e7568..68de22b 100644 --- a/sys/amd64/amd64/identcpu.c +++ b/sys/amd64/amd64/identcpu.c @@ -76,8 +76,26 @@ static void print_via_padlock_info(void); =20 int cpu_class; char machine[] =3D "amd64"; -SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD,=20 - machine, 0, "Machine class"); + +static int +sysctl_hw_machine(SYSCTL_HANDLER_ARGS) +{ +#ifdef SCTL_MASK32 + static const char machine32[] =3D "i386"; +#endif + int error; + +#ifdef SCTL_MASK32 + if ((req->flags & SCTL_MASK32) !=3D 0) + error =3D SYSCTL_OUT(req, machine32, sizeof(machine32)); + else +#endif + error =3D SYSCTL_OUT(req, machine, sizeof(machine)); + return (error); + +} +SYSCTL_PROC(_hw, HW_MACHINE, machine, CTLTYPE_STRING | CTLFLAG_RD, + NULL, 0, sysctl_hw_machine, "A", "Machine class"); =20 static char cpu_model[128]; SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD,=20 diff --git a/sys/kern/kern_mib.c b/sys/kern/kern_mib.c index 7ef580f..0b7d27f 100644 --- a/sys/kern/kern_mib.c +++ b/sys/kern/kern_mib.c @@ -232,9 +232,31 @@ sysctl_hw_pagesizes(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_hw, OID_AUTO, pagesizes, CTLTYPE_ULONG | CTLFLAG_RD, NULL, 0, sysctl_hw_pagesizes, "LU", "Supported page sizes"); =20 -static char machine_arch[] =3D MACHINE_ARCH; -SYSCTL_STRING(_hw, HW_MACHINE_ARCH, machine_arch, CTLFLAG_RD, - machine_arch, 0, "System architecture"); +static int +sysctl_hw_machine_arch(SYSCTL_HANDLER_ARGS) +{ + static const char machine_arch[] =3D MACHINE_ARCH; +#ifdef SCTL_MASK32 + static const char machine_arch32[] =3D=20 +#if defined(__amd64__) || defined(__ia64__) + "i386"; +#else + MACHINE_ARCH; +#endif +#endif + int error; + +#ifdef SCTL_MASK32 + if ((req->flags & SCTL_MASK32) !=3D 0) + error =3D SYSCTL_OUT(req, machine_arch32, sizeof(machine_arch32)); + else +#endif + error =3D SYSCTL_OUT(req, machine_arch, sizeof(machine_arch)); + return (error); + +} +SYSCTL_PROC(_hw, HW_MACHINE_ARCH, machine_arch, CTLTYPE_STRING | CTLFLAG_R= D, + NULL, 0, sysctl_hw_machine_arch, "A", "System architecture"); =20 static int sysctl_hostname(SYSCTL_HANDLER_ARGS) --Cjvo8w+V8lMs5Jsv Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEARECAAYFAkxExA4ACgkQC3+MBN1Mb4gU1wCeKOkfffKkS5WYTXHjuIdgO+V6 KB0AoI6WR+a6LS3/KA+SnQeULxS16EAX =AEoP -----END PGP SIGNATURE----- --Cjvo8w+V8lMs5Jsv--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100719213054.GB2381>