------- Comment #6 from danglin at gcc dot gnu dot org  2008-12-10 18:10 -------
On hppa64, I see a "random" segfault in crayptr2.f90 compiled at -O0:

(gdb) r
Starting program:
/mnt/gnu/gcc/objdir/hppa64-hp-hpux11.11/libgomp/testsuite/crayptr2.xg0 
warning: Private mapping of shared library text was not specified
by the executable; setting a breakpoint in a shared library which
is not privately mapped will not work.  See the HP-UX 11i v3 chatr
manpage for methods to privately map shared library text.
warning: Loadable segment ".tbss" outside of ELF segments
warning: Loadable segment ".tbss" outside of ELF segments
warning: Loadable segment ".tbss" outside of ELF segments
[New process 28502, lwp 2270431]
[process 28502, lwp 2270431 exited]
[New process 28502, lwp 2270432]
[process 28502, lwp 2270432 exited]
[New process 28502, lwp 2270433]
[process 28502, lwp 2270433 exited]
[New process 28502, lwp 2270434]
[New process 28502, lwp 2270435]
[New process 28502, lwp 2270436]

Program received signal SIGSEGV, Segmentation fault.
[Switching to process 28502, lwp 2270435]
0x4000000000002d08 in MAIN__.omp_fn.0 (.omp_data_i=Cannot access memory at
address 0x0
)
    at /mnt/gnu/gcc/gcc/libgomp/testsuite/libgomp.fortran/crayptr2.f90:23
23        l = p .ne. omp_get_thread_num () + 1
Current language:  auto; currently fortran
(gdb) p/x $pc
$1 = 0x4000000000002d08
(gdb) disass 0x4000000000002cf8 0x4000000000002d18
Dump of assembler code from 0x4000000000002cf8 to 0x4000000000002d18:
0x4000000000002cf8 <MAIN__.omp_fn.0+136>:       b,l 0x4000000000002b2c
<.stub+60>,rp
0x4000000000002cfc <MAIN__.omp_fn.0+140>:       nop
0x4000000000002d00 <MAIN__.omp_fn.0+144>:       copy r4,dp
0x4000000000002d04 <MAIN__.omp_fn.0+148>:       ldd 0(ret0),ret0
0x4000000000002d08 <MAIN__.omp_fn.0+152>:       ldw 0(ret0),ret0
0x4000000000002d0c <MAIN__.omp_fn.0+156>:       extrd,s ret0,63,32,ret0
0x4000000000002d10 <MAIN__.omp_fn.0+160>:       stw r0,18(r3)
0x4000000000002d14 <MAIN__.omp_fn.0+164>:       cmpb,=,n
ret0,r5,0x4000000000002d20 <MAIN__.omp_fn.0+176>
End of assembler dump.
(gdb) p/x $ret0
$2 = 0x0

This results from the code loading indirectly data with a the pointer
returned from a call to __emutls_get_address:

        addil LT'__emutls_v.ip.565,%r27
        copy %r1,%r28
        ldd RT'__emutls_v.ip.565(%r28),%r28
        copy %r28,%r26
        ldo -48(%r30),%r29
        copy %r27,%r4
        b,l __emutls_get_address,%r2
        nop
        copy %r4,%r27
        ldd 0(%r28),%r28
        ldw 0(%r28),%r28

Is darwin also using EMUTLS?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35677

Reply via email to