diff options
author | Roberto Vargas <roberto.vargas@arm.com> | 2018-05-24 13:34:53 +0100 |
---|---|---|
committer | Roberto Vargas <roberto.vargas@arm.com> | 2018-08-03 11:31:39 +0100 |
commit | 6c3733456706809d5c9fb78a9746bf2fa484fb91 (patch) | |
tree | 33db63840f53e4d26ed3934be84e91f041b6eead /lib/libc | |
parent | ea7a57a3a5963a5c8a67bfd42b4f6ad1472b46f3 (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.c | 20 |
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; } |