Skip to content

MINSIGSTKSZ is no longer a constant on Linux #41806

Description

@t-bltg

Build of julia 1.6.2 fails with latest glibc 2.34:
src/task.c:78:29: error: function-like macro 'sysconf' is not defined

From glibc change-log:

* Add _SC_MINSIGSTKSZ and _SC_SIGSTKSZ.  When _DYNAMIC_STACK_SIZE_SOURCE
  or _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are no longer
  constant on Linux.  MINSIGSTKSZ is redefined to sysconf(_SC_MINSIGSTKSZ)
  and SIGSTKSZ is redefined to sysconf (_SC_SIGSTKSZ).  This supports
  dynamic sized register sets for modern architectural features like
  Arm SVE.

On the fly patch:

--- src/task.c  2021-08-06 19:49:47.719030000 +0000
+++ src/task.c  2021-08-06 20:52:25.068536704 +0000
@@ -29,6 +29,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
+#include <unistd.h>
 #include <errno.h>
 #include <inttypes.h>
 #include "julia.h"
@@ -75,7 +76,7 @@
 
 // empirically, jl_finish_task needs about 64k stack space to infer/run
 // and additionally, gc-stack reserves 64k for the guard pages
-#if defined(MINSIGSTKSZ) && MINSIGSTKSZ > 131072
+#if defined(MINSIGSTKSZ)
 #define MINSTKSZ MINSIGSTKSZ
 #else
 #define MINSTKSZ 131072

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions