CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: matt Date: Sun Sep 8 13:15:54 UTC 2013 Modified Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: detect whether hw divide is present. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u src/lib/libc/arch/arm/misc/arm_initfini.c:1.6 src/lib/libc/arch/arm/misc/arm_initfini.c:1.7 --- src/lib/libc/arch/arm/misc/arm_initfini.c:1.6 Sun Sep 8 12:11:56 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Sun Sep 8 13:15:53 2013 @@ -29,7 +29,7 @@ #include -__RCSID("$NetBSD: arm_initfini.c,v 1.6 2013/09/08 12:11:56 matt Exp $"); +__RCSID("$NetBSD: arm_initfini.c,v 1.7 2013/09/08 13:15:53 matt Exp $"); #include "namespace.h" @@ -47,7 +47,9 @@ __RCSID("$NetBSD: arm_initfini.c,v 1.6 2 #include __dso_hidden int _libc_arm_fpu_present; +#ifndef __ARM_ARCH_EXT_IDIV__ __dso_hidden int _libc_arm_hwdiv_present; +#endif static bool _libc_aapcs_initialized; void _libc_aapcs_init(void) __attribute__((__constructor__, __used__)); @@ -60,7 +62,9 @@ _libc_aapcs_init(void) _libc_aapcs_initialized = true; (void)sysctlbyname("machdep.fpu_present", &_libc_arm_fpu_present, &len, NULL, 0); +#ifndef __ARM_ARCH_EXT_IDIV__ (void)sysctlbyname("machdep.hwdiv_present", &_libc_arm_hwdiv_present, &len, NULL, 0); +#endif } }
CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: matt Date: Sun Sep 8 12:11:56 UTC 2013 Modified Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: Detect presence of hardware divide. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u src/lib/libc/arch/arm/misc/arm_initfini.c:1.5 src/lib/libc/arch/arm/misc/arm_initfini.c:1.6 --- src/lib/libc/arch/arm/misc/arm_initfini.c:1.5 Mon Aug 19 22:14:37 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Sun Sep 8 12:11:56 2013 @@ -29,7 +29,7 @@ #include -__RCSID("$NetBSD: arm_initfini.c,v 1.5 2013/08/19 22:14:37 matt Exp $"); +__RCSID("$NetBSD: arm_initfini.c,v 1.6 2013/09/08 12:11:56 matt Exp $"); #include "namespace.h" @@ -47,6 +47,7 @@ __RCSID("$NetBSD: arm_initfini.c,v 1.5 2 #include __dso_hidden int _libc_arm_fpu_present; +__dso_hidden int _libc_arm_hwdiv_present; static bool _libc_aapcs_initialized; void _libc_aapcs_init(void) __attribute__((__constructor__, __used__)); @@ -59,5 +60,7 @@ _libc_aapcs_init(void) _libc_aapcs_initialized = true; (void)sysctlbyname("machdep.fpu_present", &_libc_arm_fpu_present, &len, NULL, 0); + (void)sysctlbyname("machdep.hwdiv_present", + &_libc_arm_hwdiv_present, &len, NULL, 0); } }
CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: matt Date: Fri Aug 16 17:09:27 UTC 2013 Modified Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: Make _libc_arm_fpu_present hidden To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u src/lib/libc/arch/arm/misc/arm_initfini.c:1.3 src/lib/libc/arch/arm/misc/arm_initfini.c:1.4 --- src/lib/libc/arch/arm/misc/arm_initfini.c:1.3 Tue Jul 30 10:47:44 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Fri Aug 16 17:09:27 2013 @@ -29,7 +29,7 @@ #include -__RCSID("$NetBSD: arm_initfini.c,v 1.3 2013/07/30 10:47:44 skrll Exp $"); +__RCSID("$NetBSD: arm_initfini.c,v 1.4 2013/08/16 17:09:27 matt Exp $"); #include "namespace.h" @@ -46,7 +46,7 @@ __RCSID("$NetBSD: arm_initfini.c,v 1.3 2 #include #include -int _libc_arm_fpu_present; +__dso_hidden int _libc_arm_fpu_present; static bool _libc_aapcs_initialized; void _libc_aapcs_init(void) __attribute__((__constructor__, __used__));
CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: skrll Date: Tue Jul 30 10:47:44 UTC 2013 Modified Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: include namespace.h - this fixes 48091 To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u src/lib/libc/arch/arm/misc/arm_initfini.c:1.2 src/lib/libc/arch/arm/misc/arm_initfini.c:1.3 --- src/lib/libc/arch/arm/misc/arm_initfini.c:1.2 Thu Jan 31 06:47:55 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Tue Jul 30 10:47:44 2013 @@ -29,7 +29,9 @@ #include -__RCSID("$NetBSD: arm_initfini.c,v 1.2 2013/01/31 06:47:55 matt Exp $"); +__RCSID("$NetBSD: arm_initfini.c,v 1.3 2013/07/30 10:47:44 skrll Exp $"); + +#include "namespace.h" /* * To properly implement setjmp/longjmp for the ARM AAPCS ABI, it has to be
CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: matt Date: Thu Jan 31 06:47:55 UTC 2013 Modified Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: Reorganize to appease lint. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u src/lib/libc/arch/arm/misc/arm_initfini.c:1.1 src/lib/libc/arch/arm/misc/arm_initfini.c:1.2 --- src/lib/libc/arch/arm/misc/arm_initfini.c:1.1 Tue Jan 29 19:14:54 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Thu Jan 31 06:47:55 2013 @@ -29,7 +29,7 @@ #include -__RCSID("$NetBSD: arm_initfini.c,v 1.1 2013/01/29 19:14:54 matt Exp $"); +__RCSID("$NetBSD: arm_initfini.c,v 1.2 2013/01/31 06:47:55 matt Exp $"); /* * To properly implement setjmp/longjmp for the ARM AAPCS ABI, it has to be @@ -42,6 +42,7 @@ __RCSID("$NetBSD: arm_initfini.c,v 1.1 2 #include #include +#include int _libc_arm_fpu_present; static bool _libc_aapcs_initialized; @@ -51,11 +52,10 @@ void _libc_aapcs_init(void) __attribute_ void _libc_aapcs_init(void) { - if (_libc_aapcs_initialized) - return; - - _libc_aapcs_initialized = true; - size_t len = sizeof(_libc_arm_fpu_present); - (void)sysctlbyname("machdep.fpu_present", &_libc_arm_fpu_present, &len, - NULL, 0); + if (!_libc_aapcs_initialized) { + size_t len = sizeof(_libc_arm_fpu_present); + _libc_aapcs_initialized = true; + (void)sysctlbyname("machdep.fpu_present", + &_libc_arm_fpu_present, &len, NULL, 0); + } }
CVS commit: src/lib/libc/arch/arm/misc
Module Name:src Committed By: matt Date: Tue Jan 29 19:14:54 UTC 2013 Added Files: src/lib/libc/arch/arm/misc: arm_initfini.c Log Message: Add a constructor for EABI to determine if a FPU is present on the system. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/lib/libc/arch/arm/misc/arm_initfini.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/lib/libc/arch/arm/misc/arm_initfini.c diff -u /dev/null src/lib/libc/arch/arm/misc/arm_initfini.c:1.1 --- /dev/null Tue Jan 29 19:14:54 2013 +++ src/lib/libc/arch/arm/misc/arm_initfini.c Tue Jan 29 19:14:54 2013 @@ -0,0 +1,61 @@ +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +__RCSID("$NetBSD: arm_initfini.c,v 1.1 2013/01/29 19:14:54 matt Exp $"); + +/* + * To properly implement setjmp/longjmp for the ARM AAPCS ABI, it has to be + * aware of whether there is a FPU is present or not. Regardless of whether + * the hard-float ABI is being used, setjmp needs to save D8-D15. But it can + * only do this if those instructions won't cause an exception. + */ + +#include +#include + +#include + +int _libc_arm_fpu_present; +static bool _libc_aapcs_initialized; + +void _libc_aapcs_init(void) __attribute__((__constructor__, __used__)); + +void +_libc_aapcs_init(void) +{ + if (_libc_aapcs_initialized) + return; + + _libc_aapcs_initialized = true; + size_t len = sizeof(_libc_arm_fpu_present); + (void)sysctlbyname("machdep.fpu_present", &_libc_arm_fpu_present, &len, + NULL, 0); +}