summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coro.c12
-rw-r--r--coro.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/coro.c b/coro.c
index b297aa3..d02c4db 100644
--- a/coro.c
+++ b/coro.c
@@ -67,6 +67,12 @@ static volatile coro_func coro_init_func;
static volatile void *coro_init_arg;
static volatile coro_context *new_coro, *create_coro;
+/* what we really want to detect here is wether we use a new-enough version of GAS */
+/* instead, check for gcc 3 and ELF and hope for the best */
+#if __GNUC__ >= 3 && __ELF__
+# define HAVE_CFI 1
+#endif
+
static void
coro_init (void)
{
@@ -75,7 +81,13 @@ coro_init (void)
coro_transfer ((coro_context *)new_coro, (coro_context *)create_coro);
+#if HAVE_CFI
+ asm (".cfi_startproc");
+#endif
func ((void *)arg);
+#if HAVE_CFI
+ asm (".cfi_endproc");
+#endif
/* the new coro returned. bad. just abort() for now */
abort ();
diff --git a/coro.h b/coro.h
index 788810f..0293293 100644
--- a/coro.h
+++ b/coro.h
@@ -39,6 +39,7 @@
* 2006-10-26 Include stddef.h on OS X to work around one of its bugs.
* Reported by Michael_G_Schwern.
* 2006-11-26 Use _setjmp instead of setjmp on GNU/Linux.
+ * 2007-04-27 Set unwind frame info if gcc 3+ and ELF is detected.
*/
#ifndef CORO_H