]> granicus.if.org Git - gc/commitdiff
2010-08-14 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Sat, 14 Aug 2010 11:52:06 +0000 (11:52 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:54 +0000 (21:06 +0400)
* dyn_load.c (GC_register_dynlib_callback): Adjust "start" pointer
for 64-bit targets.
* pthread_support.c (start_mark_threads): Expand PTHREAD_CREATE
macro.
* pthread_support.c (start_mark_threads): Call INIT_REAL_SYMS()
since REAL(pthread_create) is used.
* pthread_support.c (PTHREAD_CREATE): Remove unused.

ChangeLog
dyn_load.c
pthread_support.c

index c6e11189e266c09082498f5bc9b9eb0ff8f9db63..8cbf0e9227d3ec67ceaadd7f073d97212f882b09 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
 2010-08-14  Ivan Maidanski <ivmai@mail.ru>
+
+       * dyn_load.c (GC_register_dynlib_callback): Adjust "start" pointer
+       for 64-bit targets.
+       * pthread_support.c (start_mark_threads): Expand PTHREAD_CREATE
+       macro.
+       * pthread_support.c (start_mark_threads): Call INIT_REAL_SYMS()
+       since REAL(pthread_create) is used.
+       * pthread_support.c (PTHREAD_CREATE): Remove unused.
+
+2010-08-14  Ivan Maidanski <ivmai@mail.ru>
+
        * extra/threadlibs.c (main): Remove --wrap for "read" (since not
        wrapped anymore).
        * doc/README.linux (GC_USE_LD_WRAP): Ditto.
index 8b5eb9d619c562da197d53502c604908e9fb5021..e1f7ed4e9dffab69c0c7aaee1d1301829bd5d9c0 100644 (file)
@@ -485,6 +485,10 @@ STATIC int GC_register_dynlib_callback(struct dl_phdr_info * info,
             break;
 #         ifdef PT_GNU_RELRO
             if (n_load_segs >= MAX_LOAD_SEGS) ABORT("Too many PT_LOAD segs");
+#           if CPP_WORDSZ == 64
+              /* start pointer value may require aligning */
+              start = (ptr_t)((word)start & ~(sizeof(word) - 1));
+#           endif
             load_segs[n_load_segs].start = start;
             load_segs[n_load_segs].end = end;
             load_segs[n_load_segs].start2 = 0;
index 0c89466afc1f8dfb28e9a24ed76ce3d2a21a6dec..87bb09b514ede99286b3833d00ae939efef85571 100644 (file)
@@ -353,13 +353,14 @@ STATIC void * GC_mark_thread(void * id)
 
 STATIC pthread_t GC_mark_threads[MAX_MARKERS];
 
-#define PTHREAD_CREATE REAL_FUNC(pthread_create)
-
 static void start_mark_threads(void)
 {
     unsigned i;
     pthread_attr_t attr;
 
+    GC_ASSERT(I_DONT_HOLD_LOCK());
+    INIT_REAL_SYMS(); /* for pthread_create */
+
     if (0 != pthread_attr_init(&attr)) ABORT("pthread_attr_init failed");
 
     if (0 != pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
@@ -383,7 +384,7 @@ static void start_mark_threads(void)
       }
 #   endif /* HPUX || GC_DGUX386_THREADS */
     for (i = 0; i < GC_markers - 1; ++i) {
-      if (0 != PTHREAD_CREATE(GC_mark_threads + i, &attr,
+      if (0 != REAL_FUNC(pthread_create)(GC_mark_threads + i, &attr,
                               GC_mark_thread, (void *)(word)i)) {
         WARN("Marker thread creation failed, errno = %" GC_PRIdPTR "\n",
              errno);