]> granicus.if.org Git - gc/commitdiff
Fix GC_jmp_buf multiple definition
authorIvan Maidanski <ivmai@mail.ru>
Tue, 15 Nov 2016 08:35:28 +0000 (11:35 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Sun, 27 Nov 2016 08:53:47 +0000 (11:53 +0300)
This error occurs only if "-fno-common" gcc option is specified.

* include/private/gc_priv.h [USE_PROC_FOR_LIBRARIES && THREADS
|| NEED_FIND_LIMIT] (GC_jmp_buf): Replace variable definition with
a declaration (as GC_EXTERN).
* os_dep.c [USE_PROC_FOR_LIBRARIES && THREADS || NEED_FIND_LIMIT]
(GC_jmp_buf): Define global variable (as GC_INNER).

include/private/gc_priv.h
os_dep.c

index 9303e74dcc30eafc57fe0063e7f2a71fd6b0f3b9..6219c274d36e04651556bf9013d7e352b625e0b7 100644 (file)
@@ -2509,7 +2509,7 @@ GC_INNER ptr_t GC_store_debug_info(ptr_t p, word sz, const char *str,
 
 #if defined(NEED_FIND_LIMIT) \
      || (defined(USE_PROC_FOR_LIBRARIES) && defined(THREADS))
-  JMP_BUF GC_jmp_buf;
+  GC_EXTERN JMP_BUF GC_jmp_buf;
 
   /* Set up a handler for address faults which will longjmp to  */
   /* GC_jmp_buf;                                                */
index 2a4ef5a2d3081ceb922f53101d42337743ad5b79..d81678c9763cdc5c6884fb7a840cdc6ead20aaca 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -901,6 +901,8 @@ GC_INNER size_t GC_page_size = 0;
   /* Some tools to implement HEURISTIC2 */
 #   define MIN_PAGE_SIZE 256    /* Smallest conceivable page size, bytes */
 
+    GC_INNER JMP_BUF GC_jmp_buf;
+
     STATIC void GC_fault_handler(int sig GC_ATTR_UNUSED)
     {
         LONGJMP(GC_jmp_buf, 1);