Commit 6c373345 authored by Roberto Vargas's avatar Roberto Vargas
Browse files

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: default avatarRoberto Vargas <roberto.vargas@arm.com>
parent ea7a57a3
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <platform_def.h> #include <platform_def.h>
#include <stdint.h> #include <stdint.h>
/******************************************************************************* /*******************************************************************************
* This function is responsible to: * This function is responsible to:
* Load SCP_BL2U if platform has defined SCP_BL2U_BASE * Load SCP_BL2U if platform has defined SCP_BL2U_BASE
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*/ */
#include <debug.h> #include <debug.h>
#include <stdlib.h>
/* mbed TLS headers */ /* mbed TLS headers */
#include <mbedtls/memory_buffer_alloc.h> #include <mbedtls/memory_buffer_alloc.h>
...@@ -23,6 +24,12 @@ ...@@ -23,6 +24,12 @@
#endif #endif
static unsigned char heap[MBEDTLS_HEAP_SIZE]; static unsigned char heap[MBEDTLS_HEAP_SIZE];
static void cleanup(void)
{
ERROR("EXIT from BL2\n");
panic();
}
/* /*
* mbed TLS initialization function * mbed TLS initialization function
*/ */
...@@ -31,6 +38,9 @@ void mbedtls_init(void) ...@@ -31,6 +38,9 @@ void mbedtls_init(void)
static int ready; static int ready;
if (!ready) { if (!ready) {
if (atexit(cleanup))
panic();
/* Initialize the mbed TLS heap */ /* Initialize the mbed TLS heap */
mbedtls_memory_buffer_alloc_init(heap, MBEDTLS_HEAP_SIZE); mbedtls_memory_buffer_alloc_init(heap, MBEDTLS_HEAP_SIZE);
......
...@@ -4,11 +4,23 @@ ...@@ -4,11 +4,23 @@
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
#include <debug.h>
#include <stdlib.h> #include <stdlib.h>
void exit(int v) static void (*exitfun)(void);
void exit(int status)
{ {
ERROR("EXIT\n"); if (exitfun)
panic(); (*exitfun)();
for (;;)
;
}
int atexit(void (*fun)(void))
{
if (exitfun)
return -1;
exitfun = fun;
return 0;
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment