From owner-svn-src-all@FreeBSD.ORG Thu Aug 5 08:57:53 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F06D61065675; Thu, 5 Aug 2010 08:57:53 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DD3EE8FC0C; Thu, 5 Aug 2010 08:57:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o758vrDA040724; Thu, 5 Aug 2010 08:57:53 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o758vrSU040718; Thu, 5 Aug 2010 08:57:53 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201008050857.o758vrSU040718@svn.freebsd.org> From: Konstantin Belousov Date: Thu, 5 Aug 2010 08:57:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210855 - in stable/8/sys: amd64/amd64 amd64/include ia64/include kern powerpc/include X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Aug 2010 08:57:54 -0000 Author: kib Date: Thu Aug 5 08:57:53 2010 New Revision: 210855 URL: http://svn.freebsd.org/changeset/base/210855 Log: MFC r210369: When compat32 binary asks for the value of hw.machine_arch, report the name of 32bit sibling architecture instead of the host one. Modified: stable/8/sys/amd64/amd64/identcpu.c stable/8/sys/amd64/include/param.h stable/8/sys/ia64/include/param.h stable/8/sys/kern/kern_mib.c stable/8/sys/powerpc/include/param.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/amd64/amd64/identcpu.c ============================================================================== --- stable/8/sys/amd64/amd64/identcpu.c Thu Aug 5 04:59:54 2010 (r210854) +++ stable/8/sys/amd64/amd64/identcpu.c Thu Aug 5 08:57:53 2010 (r210855) @@ -76,8 +76,30 @@ static void print_via_padlock_info(void) int cpu_class; char machine[] = "amd64"; -SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD, - machine, 0, "Machine class"); + +#ifdef SCTL_MASK32 +extern int adaptive_machine_arch; +#endif + +static int +sysctl_hw_machine(SYSCTL_HANDLER_ARGS) +{ +#ifdef SCTL_MASK32 + static const char machine32[] = "i386"; +#endif + int error; + +#ifdef SCTL_MASK32 + if ((req->flags & SCTL_MASK32) != 0 && adaptive_machine_arch) + error = SYSCTL_OUT(req, machine32, sizeof(machine32)); + else +#endif + error = 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"); static char cpu_model[128]; SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD, Modified: stable/8/sys/amd64/include/param.h ============================================================================== --- stable/8/sys/amd64/include/param.h Thu Aug 5 04:59:54 2010 (r210854) +++ stable/8/sys/amd64/include/param.h Thu Aug 5 08:57:53 2010 (r210855) @@ -69,6 +69,9 @@ #ifndef MACHINE_ARCH #define MACHINE_ARCH "amd64" #endif +#ifndef MACHINE_ARCH32 +#define MACHINE_ARCH32 "i386" +#endif #if defined(SMP) || defined(KLD_MODULE) #define MAXCPU 32 Modified: stable/8/sys/ia64/include/param.h ============================================================================== --- stable/8/sys/ia64/include/param.h Thu Aug 5 04:59:54 2010 (r210854) +++ stable/8/sys/ia64/include/param.h Thu Aug 5 08:57:53 2010 (r210855) @@ -68,6 +68,9 @@ #ifndef MACHINE_ARCH #define MACHINE_ARCH "ia64" #endif +#ifndef MACHINE_ARCH32 +#define MACHINE_ARCH32 "i386" +#endif #if defined(SMP) || defined(KLD_MODULE) #define MAXCPU 32 Modified: stable/8/sys/kern/kern_mib.c ============================================================================== --- stable/8/sys/kern/kern_mib.c Thu Aug 5 04:59:54 2010 (r210854) +++ stable/8/sys/kern/kern_mib.c Thu Aug 5 08:57:53 2010 (r210855) @@ -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"); -static char machine_arch[] = MACHINE_ARCH; -SYSCTL_STRING(_hw, HW_MACHINE_ARCH, machine_arch, CTLFLAG_RD, - machine_arch, 0, "System architecture"); +#ifdef SCTL_MASK32 +int adaptive_machine_arch = 1; +SYSCTL_INT(_debug, OID_AUTO, adaptive_machine_arch, CTLFLAG_RW, + &adaptive_machine_arch, 1, + "Adapt reported machine architecture to the ABI of the binary"); +#endif + +static int +sysctl_hw_machine_arch(SYSCTL_HANDLER_ARGS) +{ + int error; + static const char machine_arch[] = MACHINE_ARCH; +#ifdef SCTL_MASK32 + static const char machine_arch32[] = MACHINE_ARCH32; + + if ((req->flags & SCTL_MASK32) != 0 && adaptive_machine_arch) + error = SYSCTL_OUT(req, machine_arch32, sizeof(machine_arch32)); + else +#endif + error = SYSCTL_OUT(req, machine_arch, sizeof(machine_arch)); + return (error); + +} +SYSCTL_PROC(_hw, HW_MACHINE_ARCH, machine_arch, CTLTYPE_STRING | CTLFLAG_RD, + NULL, 0, sysctl_hw_machine_arch, "A", "System architecture"); static int sysctl_hostname(SYSCTL_HANDLER_ARGS) Modified: stable/8/sys/powerpc/include/param.h ============================================================================== --- stable/8/sys/powerpc/include/param.h Thu Aug 5 04:59:54 2010 (r210854) +++ stable/8/sys/powerpc/include/param.h Thu Aug 5 08:57:53 2010 (r210855) @@ -69,6 +69,11 @@ #define MACHINE_ARCH "powerpc" #endif #define MID_MACHINE MID_POWERPC +#ifdef __powerpc64__ +#ifndef MACHINE_ARCH32 +#define MACHINE_ARCH32 "powerpc" +#endif +#endif #if defined(SMP) || defined(KLD_MODULE) #define MAXCPU 2