diff --git a/lib/bcheck.c b/lib/bcheck.c
index 9996649d..48d76061 100644
--- a/lib/bcheck.c
+++ b/lib/bcheck.c
@@ -216,6 +216,14 @@ BOUND_PTR_INDIR(16)
     __asm__ __volatile__ ("movl %%ebp,%0" :"=g" (fp1));\
     fp = fp1[0];\
 }
+#elif defined(__x86_64__)
+/* TCC always creates %rbp frames also on x86_64, so use them.  */
+#define GET_CALLER_FP(fp)\
+{\
+    unsigned long *fp1;\
+    __asm__ __volatile__ ("movq %%rbp,%0" :"=g" (fp1));\
+    fp = fp1[0];\
+}
 #else
 #error put code to extract the calling frame pointer
 #endif