OSDN Git Service

2009-09-01 Loren J. Rittle <ljrittle@acm.org>
authorljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 1 Sep 2009 18:13:18 +0000 (18:13 +0000)
committerljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 1 Sep 2009 18:13:18 +0000 (18:13 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151278 138bc75d-0d04-0410-961f-82ee72b054a4

libmudflap/ChangeLog
libmudflap/mf-hooks1.c
libmudflap/mf-runtime.c

index 5a899c1..e51c109 100644 (file)
@@ -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,
index e74c13a..1e46a65 100644 (file)
@@ -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
index 46e7e2f..3bfaf02 100644 (file)
@@ -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 ();