seg fault with tls arrays gcc-4.4.1 -mcmodel=large (x86_64)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have  following sample code. It segfaults on the assignment "x1[1]
=60", the assignment in the loop "x[i] = x[i] + i +250" goes through
fine. I have looked at the assembly generated, it is different in both
cases, though looks equivalent to my non-expert eyes.  Is this a bug
or am I missing something.

gcc version is 4.4.1, kernel-version 2.6.31-21-generic
compiled with "gcc -mcmodel=large test.c -o test"

#include <stdio.h>
#include <pthread.h>

#define SIZE 2

__thread int x1[SIZE] = {300, 400};

int main()
{
        int i = 0;
        for ( i = 0 ; i < SIZE ; i++ )
        {
                x1[i] = x1[i] + i + 250;  /*This access works fine*/
        }

        x1[0] = 50;
        printf ("%d x1[0] = %d\n", __LINE__, x1[0]);
        x1[1] = 60;             /* This line segfaults */
        printf ("%d x1[1] = %d\n", __LINE__, x1[1]);

        return 0;
}

On further digging this might be a linker/loader issue x1@TPOFF+4
seems to generating a garbage value.
-Shankha

PS: Reposting of google groups query, since it didn't appear here.
Andrew Haley responded there saying it is a bug

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux