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

SIGSEGV на старте.



Написал сценарий для сборки.
Все просто - в каждом файле <func>.for находится описание функции
<func>. Из них делались объектники, после чего все объектники линкуются
с основной программой. Все прекрасно компилируется, все прекрасно
линкуется.

Однако запускаться - не запускается. Мгновенно после запуска программа
вылетает, словив SIGSEGV. Вот такая вот беда. Так как я никогда раньше
такие проблемы не решал, прошу помочь сообщество разобраться, почему
происходит вылет из-за ошибки сегментирования, и как вообще решать
такого рода проблемы.

Текущий вариант программы 100% компилировался и работал под виндами.
Никаких изменений, влияющих на логику, я в сырцы не вносил.

Вот все, над чем я пока рассуждаю:

(SLC6)freehck@ws00:~/solver3% ldd solver3 
 linux-gate.so.1 =>  (0xb77d2000)
 libm.so.6 => /lib/libm.so.6 (0xb77a3000)
 libiomp5.so => /opt/intel/Compiler/11.1/080/lib/ia32/libiomp5.so (0xb7708000)
 libpthread.so.0 => /lib/libpthread.so.0 (0xb76ed000)
 libc.so.6 => /lib/libc.so.6 (0xb7557000)
 libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7538000)
 libdl.so.2 => /lib/libdl.so.2 (0xb7533000)
 /lib/ld-linux.so.2 (0xb77d3000)

(SLC6)freehck@ws00:~/solver3% strace ./solver3 &> solver3.strace

Attachment: solver3.strace
Description: Binary data

(SLC6)freehck@ws00:~/solver3/Oblique_shock% ltrace ./solver3 &> solver3.ltrace

Attachment: solver3.ltrace
Description: Binary data

(SLC6)freehck@ws00:~/solver3% gdb ./solver3
< ... cut ... >
(gdb) run
Starting program: /home/freehck/solver3/solver3 
[Thread debugging using libthread_db enabled]

Program received signal SIGSEGV, Segmentation fault.
0x0804a333 in MAIN__ ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6_3.6.i686 libgcc-4.4.6-4.el6.i686

(gdb) disas MAIN__
Dump of assembler code for function MAIN__:
   0x0804a310 <+0>:    push   %ebx
   0x0804a311 <+1>:    mov    %esp,%ebx
   0x0804a313 <+3>:    and    $0xffffffc0,%esp
   0x0804a316 <+6>:    push   %ebp
   0x0804a317 <+7>:    push   %ebp
   0x0804a318 <+8>:    mov    0x4(%ebx),%ebp
   0x0804a31b <+11>:   mov    %ebp,0x4(%esp)
   0x0804a31f <+15>:   mov    %esp,%ebp
   0x0804a321 <+17>:   sub    $0x1ac8d038,%esp
   0x0804a327 <+23>:   mov    %edi,-0x2b4(%ebp)
   0x0804a32d <+29>:   mov    %esi,-0x2b8(%ebp)
=> 0x0804a333 <+35>:   push   $0x3
   0x0804a335 <+37>:   call   0x818a450 <__intel_new_proc_init>
   0x0804a33a <+42>:   stmxcsr -0x1ac8d038(%ebp)
   0x0804a341 <+49>:   orl    $0x8000,-0x1ac8d038(%ebp)
   0x0804a34b <+59>:   ldmxcsr -0x1ac8d038(%ebp)
   0x0804a352 <+66>:   add    $0x4,%esp
   0x0804a355 <+69>:   push   $0x0
   0x0804a357 <+71>:   push   $0x81df62c
   0x0804a35c <+76>:   call   0x8049f40 <__kmpc_begin@plt>
< ... cut ... >

(gdb) bt
#0  0x0804a333 in MAIN__ ()
Cannot access memory at address 0xa536fc84

--------------------

Тема выросла как продолжение мучений с библиотекой IMSL и Intel
Fortran. На данный момент в нашем институте разработчик программы уже
отвязал ее от IMSL - потому в выводе ldd эти либы не фигурируют.

Я так понимаю, что раз вылетает из-за futex, корни проблемы стоит искать
в многопоточности, да?

-- 
**************************************
*  jabber:  freehck@jabber.mipt.ru   *
*   Registered linux user #546240    *
**************************************

Reply to: