aboutsummaryrefslogtreecommitdiff
path: root/libmudflap
diff options
context:
space:
mode:
authorGerald Pfeifer <gerald@pfeifer.com>2010-06-20 19:40:29 +0000
committerGerald Pfeifer <gerald@gcc.gnu.org>2010-06-20 19:40:29 +0000
commit9cb3d372292294fe8b047127c637531501d62493 (patch)
treeecb583057d776881e96c706e192f2d8bb4630c2d /libmudflap
parentb4f77360376bdf7013d6550dd1fd4410c1022cab (diff)
backport: mf-runtime.c (__mf_init): Support FreeBSD.
Backport from mainline: 2009-09-01 Loren J. Rittle <ljrittle@acm.org> * mf-runtime.c (__mf_init): Support FreeBSD. Prime mutex which calls calloc upon first lock to avoid deadlock. * mf-hooks1.c (__mf_0fn_mmap): Support FreeBSD. Ignore red zone allocation request for initial thread's stack. From-SVN: r161050
Diffstat (limited to 'libmudflap')
-rw-r--r--libmudflap/ChangeLog10
-rw-r--r--libmudflap/mf-hooks1.c5
-rw-r--r--libmudflap/mf-runtime.c6
3 files changed, 21 insertions, 0 deletions
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index b49145e86e7..ff20daf1e53 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,3 +1,13 @@
+2010-06-20 Gerald Pfeifer <gerald@pfeifer.com>
+
+ Backport from mainline:
+ 2009-09-01 Loren J. Rittle <ljrittle@acm.org>
+
+ * mf-runtime.c (__mf_init): Support FreeBSD.
+ Prime mutex which calls calloc upon first lock to avoid deadlock.
+ * mf-hooks1.c (__mf_0fn_mmap): Support FreeBSD.
+ Ignore red zone allocation request for initial thread's stack.
+
2010-04-29 Jakub Jelinek <jakub@redhat.com>
PR other/43620
diff --git a/libmudflap/mf-hooks1.c b/libmudflap/mf-hooks1.c
index e74c13afcce..1e46a650947 100644
--- a/libmudflap/mf-hooks1.c
+++ b/libmudflap/mf-hooks1.c
@@ -321,6 +321,11 @@ WRAPPER(void, free, void *buf)
void *
__mf_0fn_mmap (void *start, size_t l, int prot, int f, int fd, off_t off)
{
+#if defined(__FreeBSD__)
+ if (f == 0x1000 && fd == -1 && prot == 0 && off == 0)
+ return 0;
+#endif /* Ignore red zone allocation request for initial thread's stack. */
+
return (void *) -1;
}
#endif
diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c
index b2c462e5251..6edb71a609f 100644
--- a/libmudflap/mf-runtime.c
+++ b/libmudflap/mf-runtime.c
@@ -695,6 +695,12 @@ __mf_init ()
if (LIKELY (__mf_starting_p == 0))
return;
+#if defined(__FreeBSD__) && defined(LIBMUDFLAPTH)
+ pthread_self();
+ LOCKTH ();
+ UNLOCKTH ();
+#endif /* Prime mutex which calls calloc upon first lock to avoid deadlock. */
+
/* This initial bootstrap phase requires that __mf_starting_p = 1. */
#ifdef PIC
__mf_resolve_dynamics ();