aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmudflap/ChangeLog7
-rw-r--r--libmudflap/mf-hooks1.c5
-rw-r--r--libmudflap/mf-runtime.c6
3 files changed, 18 insertions, 0 deletions
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 5a899c1..e51c109 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,4 +1,11 @@
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.
+
+2009-09-01 Loren J. Rittle <ljrittle@acm.org>
Andreas Schwab <schwab@linux-m68k.org>
* testsuite/libmudflap.c/pass51-frag.c (MAP_FAILED): Define,
diff --git a/libmudflap/mf-hooks1.c b/libmudflap/mf-hooks1.c
index e74c13a..1e46a65 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 46e7e2f..3bfaf02 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 ();