summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorRoberto Vargas <roberto.vargas@arm.com>2018-05-24 13:34:53 +0100
committerRoberto Vargas <roberto.vargas@arm.com>2018-08-03 11:31:39 +0100
commit6c3733456706809d5c9fb78a9746bf2fa484fb91 (patch)
tree33db63840f53e4d26ed3934be84e91f041b6eead /lib/libc
parentea7a57a3a5963a5c8a67bfd42b4f6ad1472b46f3 (diff)
Add atexit function to libc
We had exit but we didn't have atexit, and we were calling panic and tf_printf from exit, which generated a dependency from exit to them. Having atexit allows to set a different function pointer in every image. Change-Id: I95b9556d680d96249ed3b14da159b6f417da7661 Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/exit.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/libc/exit.c b/lib/libc/exit.c
index afc3f934..b2fde9ca 100644
--- a/lib/libc/exit.c
+++ b/lib/libc/exit.c
@@ -4,11 +4,23 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
-#include <debug.h>
#include <stdlib.h>
-void exit(int v)
+static void (*exitfun)(void);
+
+void exit(int status)
{
- ERROR("EXIT\n");
- panic();
+ if (exitfun)
+ (*exitfun)();
+ for (;;)
+ ;
+}
+
+int atexit(void (*fun)(void))
+{
+ if (exitfun)
+ return -1;
+ exitfun = fun;
+
+ return 0;
}