From 5dbd6a69ca25904e6cfd9dabafae70241673a7d2 Mon Sep 17 00:00:00 2001 From: skrll Date: Fri, 30 Jan 2009 14:29:44 +0000 Subject: [PATCH] Make sure _atomic_cas_fn is initialised for "weirdo environments" such as ramdisks where the constructor doesn't get called. Fixes ifconfig in hp700 sysinst. OK'ed by ad. --- common/lib/libc/atomic/atomic_init_testset.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/common/lib/libc/atomic/atomic_init_testset.c b/common/lib/libc/atomic/atomic_init_testset.c index 87256f24360e..e3a5fd286778 100644 --- a/common/lib/libc/atomic/atomic_init_testset.c +++ b/common/lib/libc/atomic/atomic_init_testset.c @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_init_testset.c,v 1.5 2008/04/29 20:57:50 scw Exp $ */ +/* $NetBSD: atomic_init_testset.c,v 1.6 2009/01/30 14:29:44 skrll Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include -__RCSID("$NetBSD: atomic_init_testset.c,v 1.5 2008/04/29 20:57:50 scw Exp $"); +__RCSID("$NetBSD: atomic_init_testset.c,v 1.6 2009/01/30 14:29:44 skrll Exp $"); #include "atomic_op_namespace.h" @@ -53,15 +53,21 @@ __RCSID("$NetBSD: atomic_init_testset.c,v 1.5 2008/04/29 20:57:50 scw Exp $"); #define I128 I16 I16 I16 I16 I16 I16 I16 I16 static __cpu_simple_lock_t atomic_locks[128] = { I128 }; -static uint32_t (*_atomic_cas_fn)(volatile uint32_t *, uint32_t, uint32_t); + +#ifdef __HAVE_ASM_ATOMIC_CAS_UP +extern uint32_t _atomic_cas_up(volatile uint32_t *, uint32_t, uint32_t); +#else +static uint32_t _atomic_cas_up(volatile uint32_t *, uint32_t, uint32_t); +#endif + +static uint32_t (*_atomic_cas_fn)(volatile uint32_t *, uint32_t, uint32_t) = + _atomic_cas_up; void __libc_atomic_init(void) __attribute__ ((visibility("hidden"))); RAS_DECL(_atomic_cas); -#ifdef __HAVE_ASM_ATOMIC_CAS_UP -extern uint32_t _atomic_cas_up(volatile uint32_t *, uint32_t, uint32_t); -#else +#ifndef __HAVE_ASM_ATOMIC_CAS_UP static uint32_t _atomic_cas_up(volatile uint32_t *ptr, uint32_t old, uint32_t new) {