Nope! Linux ubuntu-x64 4.4.0-116-generic - this is just the kernel from a default Ubuntu 16.04 install. On Wed, Nov 7, 2018 at 6:31 PM Rich Felker wrote: > On Wed, Nov 07, 2018 at 06:00:14PM -0500, Barry Flartus wrote: > > Hello, > > > > I am encountering some issues that I believe are musl related when > trying to > > use pthreads from a shared object. Below is a minimal example (2 files) > of > > the problem. > > > > ==================== test.c ==================== > > > > // Compile with > > // musl-gcc -Wall -lpthread -shared -fPIC test.c -o test.so > > > > #include > > #include > > > > static void *launch(void *arg); > > int start_thread(void); > > void entry_point(void) __attribute__((constructor)); > > > > static pthread_t gthread; > > > > static void *launch(void *arg) > > { > > for (int i = 0; i < 4; i++){ > > printf("[%d] Hello from the thread\n", i); > > } > > return NULL; > > } > > > > int start_thread(void) > > { > > printf("Starting the thread\n"); > > return pthread_create(>hread, NULL, launch, NULL); > > } > > > > void entry_point(void){ > > puts("Starting Execution"); > > int res = start_thread(); > > printf("start_thread returned %d\n", res); > > if (res == 0){ > > pthread_join(gthread, NULL); > > } else { > > printf("pthread_create() returned an error. Aborting.\n"); > > } > > } > > > > ==================== launch.c ==================== > > > > // Compile with: > > // gcc launch.c -ldl -o launch > > > > #include > > #include > > #include > > > > int main(){ > > void *handle; > > > > puts("\nLaunching test..."); > > handle = dlopen("./test.so", RTLD_NOW); > > if (!handle) { > > fprintf(stderr, "%s\n", dlerror()); > > exit(EXIT_FAILURE); > > } > > dlerror(); > > > > return EXIT_SUCCESS; > > } > > > > When the above examples are compiled with gcc, everything works correctly > > and > > produces the following output: > > > > Launching test... > > Starting Execution > > Starting the threadstart_thread returned 0 > > [0] Hello from the thread > > [1] Hello from the thread > > [2] Hello from the thread > > [3] Hello from the thread > > > > When I switch to musl pthread_create() returns the integer '38', which > is an > > undocumented return value. I assume this corresponds with ENOSYS from > > errno.h > > but I can't seem to figure out why this is happening. > > > > Output: > > > > Launching test... > > Starting Execution > > Starting the thread > > start_thread returned 38 > > pthread_create() returned an error. Aborting. > > > > Is this even supported by musl? If so, where have I gone wrong? > > > > Thanks in advance! > > Are you running on an ancient kernel or a kernel built with a lot of > default functionality configured out? These should be the only > conditions under which pthread_create can return ENOSYS. > > Rich >