Add __builtin_frame_address(0)
Adding the GCC extension __builtin_frame_address(). We support only zero as the argument for now. With this functionality, we can implement GCC compatible stdarg by macros in x86-64.
This commit is contained in:
parent
73a84cefda
commit
d6072d3703
2 changed files with 19 additions and 0 deletions
18
tcc.c
18
tcc.c
|
@ -7599,6 +7599,24 @@ static void unary(void)
|
||||||
vpushi(res);
|
vpushi(res);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TOK_builtin_frame_address:
|
||||||
|
{
|
||||||
|
CType type;
|
||||||
|
next();
|
||||||
|
skip('(');
|
||||||
|
if (tok != TOK_CINT) {
|
||||||
|
error("__builtin_frame_address only takes integers");
|
||||||
|
}
|
||||||
|
if (tokc.i != 0) {
|
||||||
|
error("TCC only supports __builtin_frame_address(0)");
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
skip(')');
|
||||||
|
type.t = VT_VOID;
|
||||||
|
mk_pointer(&type);
|
||||||
|
vset(&type, VT_LOCAL, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TOK_INC:
|
case TOK_INC:
|
||||||
case TOK_DEC:
|
case TOK_DEC:
|
||||||
t = tok;
|
t = tok;
|
||||||
|
|
1
tcctok.h
1
tcctok.h
|
@ -109,6 +109,7 @@
|
||||||
DEF(TOK_NORETURN2, "__noreturn__")
|
DEF(TOK_NORETURN2, "__noreturn__")
|
||||||
DEF(TOK_builtin_types_compatible_p, "__builtin_types_compatible_p")
|
DEF(TOK_builtin_types_compatible_p, "__builtin_types_compatible_p")
|
||||||
DEF(TOK_builtin_constant_p, "__builtin_constant_p")
|
DEF(TOK_builtin_constant_p, "__builtin_constant_p")
|
||||||
|
DEF(TOK_builtin_frame_address, "__builtin_frame_address")
|
||||||
DEF(TOK_REGPARM1, "regparm")
|
DEF(TOK_REGPARM1, "regparm")
|
||||||
DEF(TOK_REGPARM2, "__regparm__")
|
DEF(TOK_REGPARM2, "__regparm__")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue