diff --git a/libs/libc/machine/arm/Make.defs b/libs/libc/machine/arm/Make.defs index a847f749246..5663cfc7a5f 100644 --- a/libs/libc/machine/arm/Make.defs +++ b/libs/libc/machine/arm/Make.defs @@ -47,6 +47,10 @@ CSRCS += aeabi_memcpy.c aeabi_memcpy4.c aeabi_memcpy8.c CSRCS += aeabi_memmove.c aeabi_memmove4.c aeabi_memmove8.c CSRCS += aeabi_memset.c aeabi_memset4.c aeabi_memset8.c +ifneq ($(CONFIG_LIBSUPCXX),y) +CSRCS += aeabi_atexit.c +endif + ifeq ($(CONFIG_CXX_EXCEPTION),y) CSRCS += gnu_unwind_find_exidx.c endif diff --git a/libs/libc/machine/arm/aeabi_atexit.c b/libs/libc/machine/arm/aeabi_atexit.c new file mode 100644 index 00000000000..4d28606d442 --- /dev/null +++ b/libs/libc/machine/arm/aeabi_atexit.c @@ -0,0 +1,54 @@ +/**************************************************************************** + * libs/libc/machine/arm/aeabi_atexit.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +int __cxa_atexit(void (*func)(void *), void *object, void *dso_handle); + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: __aeabi_atexit + * + * Description: + * Registers static object destructors. Normally atexit(f) should call + * __aeabi_atexit (NULL, f, NULL). But in the usage model here, static + * constructors are initialized at power up and are never destroyed + * because they have global scope and must persist for as long as the + * embedded device is powered on. + * + ****************************************************************************/ + +int weak_function __aeabi_atexit(void *object, + void (*func)(void *), + void *dso_handle) +{ + return __cxa_atexit(func, object, dso_handle); +} diff --git a/libs/libxx/Makefile b/libs/libxx/Makefile index 3e0e1c83274..50cf35aaad7 100644 --- a/libs/libxx/Makefile +++ b/libs/libxx/Makefile @@ -41,10 +41,6 @@ ifeq ($(CONFIG_LIBCXXABI),y) include libcxxabi.defs endif -ifneq ($(CONFIG_LIBSUPCXX),y) -CXXSRCS += libxx_eabi_atexit.cxx -endif - CXXSRCS += libxx_cxa_atexit.cxx # Object Files diff --git a/libs/libxx/libxx_eabi_atexit.cxx b/libs/libxx/libxx_eabi_atexit.cxx deleted file mode 100644 index cdbc74d34a1..00000000000 --- a/libs/libxx/libxx_eabi_atexit.cxx +++ /dev/null @@ -1,62 +0,0 @@ -//*************************************************************************** -// libs/libxx/libxx_eabi_atexit.cxx -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. The -// ASF licenses this file to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance with the -// License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// -//*************************************************************************** - -//*************************************************************************** -// Included Files -//*************************************************************************** - -#include -#include - -#include "libxx.hxx" - -//*************************************************************************** -// Pre-processor Definitions -//*************************************************************************** - -//*************************************************************************** -// Private Data -//*************************************************************************** - -//*************************************************************************** -// Public Functions -//*************************************************************************** - -extern "C" -{ - //************************************************************************* - // Name: __aeabi_atexit - // - // Description: - // Registers static object destructors. Normally atexit(f) should call - // __aeabi_atexit (NULL, f, NULL). But in the usage model here, static - // constructors are initialized at power up and are never destroyed - // because they have global scope and must persist for as long as the - // embedded device is powered on. - // - // Reference: - // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041c/IHI0041C_cppabi.pdf - // - //************************************************************************* - - int __aeabi_atexit(FAR void *object, __cxa_exitfunc_t func, FAR void *dso_handle) - { - return __cxa_atexit(func, object, dso_handle); // 0 ? OK; non-0 ? failed - } -}