forked from ariadne/libucontext
62 lines
1.0 KiB
C
62 lines
1.0 KiB
C
#ifndef __ARCH_COMMON_COMMON_DEFS_H
|
|
#define __ARCH_COMMON_COMMON_DEFS_H
|
|
|
|
#ifndef SETUP_FRAME
|
|
# define SETUP_FRAME(__proc)
|
|
#endif
|
|
|
|
#ifndef PUSH_FRAME
|
|
# define PUSH_FRAME(__proc)
|
|
#endif
|
|
|
|
#ifndef POP_FRAME
|
|
# define POP_FRAME(__proc)
|
|
#endif
|
|
|
|
#ifndef ENT
|
|
# define ENT(__proc)
|
|
#endif
|
|
|
|
#ifndef TYPE
|
|
# ifdef __clang__
|
|
# define TYPE(__proc) // .type not supported
|
|
# else
|
|
# define TYPE(__proc) .type __proc, @function;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef PROC_NAME
|
|
# ifdef __MACH__
|
|
# define PROC_NAME(__proc) _ ## __proc
|
|
# else
|
|
# define PROC_NAME(__proc) __proc
|
|
# endif
|
|
#endif
|
|
|
|
#define FUNC(__proc) \
|
|
.global PROC_NAME(__proc); \
|
|
.align 2; \
|
|
TYPE(__proc) \
|
|
ENT(__proc) \
|
|
PROC_NAME(__proc): \
|
|
SETUP_FRAME(__proc)
|
|
#ifdef __clang__
|
|
#define END(__proc)
|
|
#else
|
|
#define END(__proc) \
|
|
.end __proc; \
|
|
.size __proc,.-__proc;
|
|
#endif
|
|
|
|
#ifdef EXPORT_UNPREFIXED
|
|
#define ALIAS(__alias, __real) \
|
|
.weak __alias; \
|
|
__alias = __real;
|
|
#else
|
|
#define ALIAS(...)
|
|
#endif
|
|
|
|
#define REG_OFFSET(__reg) (MCONTEXT_GREGS + ((__reg) * REG_SZ))
|
|
|
|
#endif
|