Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-07-27 11:11:44 +0300
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-07-30 11:47:57 +0300
commit6158b30e3e9b1b582ae60b15d64e775fa1705483 (patch)
tree1a2d615c1b610996574650fba91d36e263afc57f /newlib/libc/misc
parent62a5c6b02c4a0353eb024840113a991c357b4c43 (diff)
RISC-V: Do not use _init/_fini
Introduce new host configuration variable "have_init_fini" which is set to "yes" by default. Override it for RISC-V to "no". Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
Diffstat (limited to 'newlib/libc/misc')
-rw-r--r--newlib/libc/misc/fini.c4
-rw-r--r--newlib/libc/misc/init.c4
2 files changed, 8 insertions, 0 deletions
diff --git a/newlib/libc/misc/fini.c b/newlib/libc/misc/fini.c
index ab4203bf8..56eed6cb3 100644
--- a/newlib/libc/misc/fini.c
+++ b/newlib/libc/misc/fini.c
@@ -17,7 +17,9 @@
extern void (*__fini_array_start []) (void) __attribute__((weak));
extern void (*__fini_array_end []) (void) __attribute__((weak));
+#ifdef HAVE_INIT_FINI
extern void _fini (void);
+#endif
/* Run all the cleanup routines. */
void
@@ -30,6 +32,8 @@ __libc_fini_array (void)
for (i = count; i > 0; i--)
__fini_array_start[i-1] ();
+#ifdef HAVE_INIT_FINI
_fini ();
+#endif
}
#endif
diff --git a/newlib/libc/misc/init.c b/newlib/libc/misc/init.c
index c85d6020f..95f1a7422 100644
--- a/newlib/libc/misc/init.c
+++ b/newlib/libc/misc/init.c
@@ -21,7 +21,9 @@ extern void (*__preinit_array_end []) (void) __attribute__((weak));
extern void (*__init_array_start []) (void) __attribute__((weak));
extern void (*__init_array_end []) (void) __attribute__((weak));
+#ifdef HAVE_INIT_FINI
extern void _init (void);
+#endif
/* Iterate over all the init routines. */
void
@@ -34,7 +36,9 @@ __libc_init_array (void)
for (i = 0; i < count; i++)
__preinit_array_start[i] ();
+#ifdef HAVE_INIT_FINI
_init ();
+#endif
count = __init_array_end - __init_array_start;
for (i = 0; i < count; i++)