[Bug 115157] executables linked statically with /usr/lib/nptl/libpthread.a fail

bugzilla at redhat.com bugzilla at redhat.com
Tue Feb 3 22:50:36 UTC 2009


Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.


https://bugzilla.redhat.com/show_bug.cgi?id=115157


geir at cray.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |geir at cray.com




--- Comment #15 from geir at cray.com  2009-02-03 17:50:31 EDT ---
FYI: I find that the problem fails on a SLES 9.2 system, but works on a SLES
9.3 system:

SLES 9.2 failing:

$ cat /etc/SuSE-release
SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 2
$ cat test2.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *
thread_sub (void *p)
{
        int *i;

        i = (int *) p;
        printf("Hello, world, I am thread %d\n", *i);
        fflush(stdout);
        pthread_exit(NULL);
}

int
main(int argc, char *argv[])
{
        pthread_t *threads;
        int *ind;
        int err;
        int i;
        int tcount = 0;
        void *status;

        if (argc < 2) {
                fprintf(stderr, "ERROR: must specify number of threads\n");
                exit(1);
        }

        tcount = atoi(argv[1]);
        fprintf(stderr, "INFO: tcount = %d\n", tcount);

        if (tcount <= 0) {
                fprintf(stderr, "ERROR: thread count must be > 0\n");
        }

        threads = malloc(sizeof(pthread_t) * tcount);
        if (threads == NULL) {
                fprintf(stderr, "ERROR: cannot malloc threads array\n");
                exit (2);
        }

        ind = malloc(sizeof(int) * tcount);
        if (ind == NULL) {
                fprintf(stderr, "ERROR: cannot malloc ind array\n");
                exit (2);
        }

        for (i = 1; i < tcount; i++) {
                ind[i] = i;
                fprintf(stderr, "INFO: start thread %d\n", i);
                err = 0;
                err = pthread_create (&threads[i], NULL, thread_sub,
                        (void *) &ind[i]);
                if (err) {
                        fprintf(stderr, "ERROR: pthread_create %d, err=%d\n",
                                i, err);
                        exit(3+i);
                }
        }
        ind[0] = 0;
        thread_sub(&ind[0]);

        for (i=1; i < tcount; i++) {
                err = pthread_join(threads[i], &status);
                if (err) {
                        fprintf(stderr, "ERROR: pthread_join %d, err=%d\n",
                                i, err);
                        exit(10+i);
                }
                fprintf(stderr, "INFO: joined thread %d\n", i);
        }
        exit(0);
}
$  gcc -static test2.c -I /usr/include/nptl -L/usr/lib64/nptl -lpthread
$ ./a.out 4
Memory fault
$

Here is a SLES 9.3 system working:

$ cat /etc/SuSE-release
SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 3
$ gcc -static test2.c -I /usr/include/nptl -L/usr/lib64/nptl -lpthread
$ ./a.out 4
INFO: tcount = 4
INFO: start thread 1
INFO: start thread 2
INFO: start thread 3
Hello, world, I am thread 2
Hello, world, I am thread 1
Hello, world, I am thread 0
Hello, world, I am thread 3
$

-- 
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.




More information about the fedora-triage-list mailing list