From cd5e7e2d8271d8d4b976eaa42c69770d94c67a74 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Sun, 29 Jan 2017 21:23:32 +0100 Subject: [PATCH] Committed, libgloss: hook up cris-elf to the initfini-array support. After a binutils change "a while ago" (2015-12) to default to --enable-initfini-array, i.e. to merge .ctors and .dtors into .init_array and .fini_array, this is needed for cdtors to run at all. Based on what goes on in arm/ and aarch64/. Tested for cris-elf by running the gcc testsuite. By the way, the configure test doesn't detect this change, so the HAVE_INITFINI_ARRAY ifdeffery is somewhat redundant. Still, the change is tested to be safe with older binutils too. libgloss/ * cris/crt0.S, cris/lcrt0.c: Include newlib.h. [HAVE_INITFINI_ARRAY] (_init): Define to __libc_init_array. [HAVE_INITFINI_ARRAY] (_fini): Ditto __libc_fini_array. --- libgloss/cris/crt0.S | 9 ++++++++- libgloss/cris/lcrt0.c | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libgloss/cris/crt0.S b/libgloss/cris/crt0.S index 74c159415..30419887e 100644 --- a/libgloss/cris/crt0.S +++ b/libgloss/cris/crt0.S @@ -1,5 +1,5 @@ /* Generic simplistic start-up-stub for CRIS/CRISv32. - Copyright (C) 1993-2005, 2007 Axis Communications. + Copyright (C) 1993-2005, 2007, 2017 Axis Communications. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -26,6 +26,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "newlib.h" + #undef cris #undef L #ifdef __NO_UNDERSCORES__ @@ -34,6 +36,11 @@ #define L(x) _ ## x #endif +#ifdef HAVE_INITFINI_ARRAY +#define _init __libc_init_array +#define _fini __libc_fini_array +#endif + ; Rudimentary v0..v32-compatible startup stub. #ifdef __ELF__ diff --git a/libgloss/cris/lcrt0.c b/libgloss/cris/lcrt0.c index ee5074634..8b8cc0bb0 100644 --- a/libgloss/cris/lcrt0.c +++ b/libgloss/cris/lcrt0.c @@ -1,5 +1,5 @@ /* Support for cris*-axis-linux-gnu and src/sim/cris simulator. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Axis Communications. + Copyright (C) 2000-2005, 2017 Axis Communications. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -27,6 +27,12 @@ POSSIBILITY OF SUCH DAMAGE. */ #include "linunistd.h" +#include "newlib.h" + +#ifdef HAVE_INITFINI_ARRAY +#define _init __libc_init_array +#define _fini __libc_fini_array +#endif extern void exit (int) __attribute ((__noreturn__));