aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tcc.c18
-rw-r--r--tcctok.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/tcc.c b/tcc.c
index f223f68..97d4445 100644
--- a/tcc.c
+++ b/tcc.c
@@ -7599,6 +7599,24 @@ static void unary(void)
vpushi(res);
}
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_DEC:
t = tok;
diff --git a/tcctok.h b/tcctok.h
index d717024..ef7bf7a 100644
--- a/tcctok.h
+++ b/tcctok.h
@@ -109,6 +109,7 @@
DEF(TOK_NORETURN2, "__noreturn__")
DEF(TOK_builtin_types_compatible_p, "__builtin_types_compatible_p")
DEF(TOK_builtin_constant_p, "__builtin_constant_p")
+ DEF(TOK_builtin_frame_address, "__builtin_frame_address")
DEF(TOK_REGPARM1, "regparm")
DEF(TOK_REGPARM2, "__regparm__")