blob: f9325455449e0ec29975ba0a2df3b0abe4815a05 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
*/
#include <asm.S>
#if defined(CFG_UNWIND)
#define UNWIND(...) __VA_ARGS__
#else
#define UNWIND(...)
#endif
/*
* This function is the bottom of the user call stack. Mark it as such so that
* the unwinding code won't try to go further down.
* We need an assembly wrapper because Clang does not accept asm(".cantunwind")
* in a C function:
*
* user_ta_header.c:44:6: error: .fnstart must precede .cantunwind directive
* asm(".cantunwind");
* ^
*/
FUNC __ta_entry, :
UNWIND( .fnstart)
UNWIND( .cantunwind)
bl __ta_entry_c
/*
* The nop makes the stack unwinding more clear (without it,
* symbolize.py may show a file/line outside the function).
*/
nop
UNWIND( .fnend)
END_FUNC __ta_entry