summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/miscfuncs.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-01-16 16:19:37 +0000
committerCorinna Vinschen <corinna@vinschen.de>2015-01-16 16:19:37 +0000
commita62dbcd6e03ff182e7d36ea60d953f447db72d62 (patch)
tree1f400f2d1a8e0b1858a18dde247222c8c09fe827 /winsup/cygwin/miscfuncs.cc
parentad45d512debb05dd8a323c0024adc6222810964c (diff)
downloadcygnal-a62dbcd6e03ff182e7d36ea60d953f447db72d62.tar.gz
cygnal-a62dbcd6e03ff182e7d36ea60d953f447db72d62.tar.bz2
cygnal-a62dbcd6e03ff182e7d36ea60d953f447db72d62.zip
* gendef: Export _sigbe on 64 bit as well.
* malloc_wrapper.cc (free): In malloc_printf, call caller_return_address instead of __builtin_return_address. (malloc): Ditto. (realloc): Ditto. (calloc): Ditto. * miscfuncs.cc (__caller_return_address): New function. * miscfuncs.h (caller_return_address): New macro calling __caller_return_address. (__caller_return_address): Add prototype.
Diffstat (limited to 'winsup/cygwin/miscfuncs.cc')
-rw-r--r--winsup/cygwin/miscfuncs.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc
index e6ea5cc2d..7f324b946 100644
--- a/winsup/cygwin/miscfuncs.cc
+++ b/winsup/cygwin/miscfuncs.cc
@@ -1,7 +1,7 @@
/* miscfuncs.cc: misc funcs that don't belong anywhere else
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc.
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Red Hat, Inc.
This file is part of Cygwin.
@@ -534,6 +534,19 @@ __import_address (void *imp)
return NULL;
}
+/* Helper function to generate the correct caller address. For external
+ calls, the return address on the stack is _sigbe. In that case the
+ actual caller return address is on the cygtls stack. Use this function
+ via the macro caller_return_address. */
+extern "C" void _sigbe ();
+
+void *
+__caller_return_address (void *builtin_ret_addr)
+{
+ return builtin_ret_addr == &_sigbe
+ ? (void *) _my_tls.retaddr () : builtin_ret_addr;
+}
+
/* CygwinCreateThread.
Replacement function for CreateThread. What we do here is to remove