nuttx/arch/tricore/include/setjmp.h
zhangyu117 02833038fd arch/tricore: Full implementation of setjmp and longjmp.
1. The original method of restoring the register context relies on
   the ret instruction, which does not conform to the semantics of
   longjmp not returning.
2. There are csa leak during longjmp and need recycle.

Signed-off-by: zhangyu117 <zhangyu117@xiaomi.com>
2026-05-22 00:38:02 +08:00

81 lines
2.3 KiB
C

/****************************************************************************
* arch/tricore/include/setjmp.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_TRICORE_INCLUDE_SETJUMP_H
#define __ARCH_TRICORE_INCLUDE_SETJUMP_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/compiler.h>
#include <stdint.h>
/****************************************************************************
* Public Types
****************************************************************************/
struct setjmp_buf_s
{
uintptr_t pcxi;
uintptr_t psw;
uintptr_t sp;
uintptr_t a11;
uintptr_t d8;
uintptr_t d9;
uintptr_t d10;
uintptr_t d11;
uintptr_t a12;
uintptr_t a13;
uintptr_t a14;
uintptr_t a15;
uintptr_t d12;
uintptr_t d13;
uintptr_t d14;
uintptr_t d15;
};
/* Traditional typedef for setjmp_buf */
typedef struct setjmp_buf_s jmp_buf[1];
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val) noreturn_function;
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __ARCH_TRICORE_INCLUDE_SETJUMP_H */