libtests/ofw01: Fix wrapped in bsp_fdt_get()

Use the stack pointer to check if we have to return the real device tree
since bsp_fdt_get() may get called before the BSS is cleared to zero.
This commit is contained in:
Sebastian Huber
2022-01-11 11:45:47 +01:00
parent b982b8d44f
commit 963a26c34b

View File

@@ -37,6 +37,7 @@
#include <bsp/fdt.h>
#include <ofw/ofw.h>
#include <ofw/ofw_test.h>
#include <rtems/score/isr.h>
#include "some.h"
@@ -50,7 +51,20 @@ const void *__real_bsp_fdt_get(void);
const void *__wrap_bsp_fdt_get(void)
{
if (test_bin != NULL) {
uintptr_t sp;
sp = (uintptr_t) __builtin_frame_address(0);
RTEMS_OBFUSCATE_VARIABLE(sp);
/*
* Use the stack pointer to check if we have to return the real device tree
* since bsp_fdt_get() may get called before the BSS is cleared to zero.
*/
if (
(sp < (uintptr_t) _ISR_Stack_area_begin ||
sp >= (uintptr_t) _ISR_Stack_area_end) &&
test_bin != NULL
) {
return test_bin;
}