Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Точка входа (http://forum.oszone.net/showthread.php?t=49596)

Andrew S 22-05-2005 01:07 326257

Точка входа
 
Есть такая проблема: При запуске программы получается деление на ноль. Запускаю ее в gdb и ставлю точку останова на main. Результат - деление на ноль происходит до main. При этом нет никаких инициализаций глобальных переменных и нет никаких объектов (чистый Си).
Если точка входа где-то не там, то как ее вычислить?

ruslandh 22-05-2005 12:22 326317

Пожалуста, приведите лог gdb
Может это не дедение на ноль, а просто нет какой-нибудь динамической библиотеки ?

Andrew S 22-05-2005 23:59 326446

Может быть и библиотеки нету, но тогда скрипт configure должен был об этом сообщить. Программа, собственно, - squid. Глюк происходит в Novell Linux Desktop 9 со всеми версиями сквида. При компиляции выдается следующее:

g++ -Werror -Wall -Wpointer-arith -Wwrite-strings -Wcomments -g -O2 -g -o cf_gen cf_gen.o -L/tmp/squid-3.0-PRE3-20050128/lib -lmiscutil -lm /usr/lib/libbind.so -lpthread -lnsl
./cf_gen cf.data
make[1]: *** [cf_parser.h] Floating point exception
make[1]: Leaving directory `/tmp/squid-3.0-PRE3-20050128/src'

Дамп отладчика:

#gdb ./cf_gen
GNU gdb 6.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i586-suse-linux"...Using host libthread_db library "/lib/tls/libthread_db.so.1".

(gdb) set args cf.data
(gdb) r
Starting program: /tmp/squid-3.0-PRE3-20050128/src/cf_gen cf.data

Program received signal SIGFPE, Arithmetic exception.
0x40008cc2 in ?? ()
(gdb) p/a 0x40008cc2
$1 = 0x40008cc2
(gdb) b main
Breakpoint 1 at 0x8048d0c: file cf_gen.cc, line 156.
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /tmp/squid-3.0-PRE3-20050128/src/cf_gen cf.data

Program received signal SIGFPE, Arithmetic exception.
0x40008cc2 in ?? ()
(gdb) p main
$2 = {int (int, char **)} 0x8048d00 <main>

Как видим, до main дело не дошло, адрес вылета никому известному не принадлежит.
И более глубоко:

(gdb) b 0x40008cc0
Function "0x40008cc0" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (0x40008cc0) pending.
(gdb) r
Starting program: /tmp/squid-3.0-PRE3-20050128/src/cf_gen cf.data

Program received signal SIGFPE, Arithmetic exception.
0x40008cc2 in ?? ()
(gdb) disas 0x40008cc0 0x40008cd0
Dump of assembler code from 0x40008cc0 to 0x40008cd0:
0x40008cc0: xor %edx,%edx
0x40008cc2: div %edi
0x40008cc4: imul %edi,%eax
0x40008cc7: sub %eax,%ecx
0x40008cc9: mov 0xffffffec(%ebp),%eax
0x40008ccc: sub %eax,%ecx
0x40008cce: mov 0xfffffff0(%ebp),%eax
End of assembler dump.
(gdb) i r
eax 0x58 88
ecx 0x58 88
edx 0x0 0
ebx 0x400166e0 1073833696
esp 0xbfffea58 0xbfffea58
ebp 0xbfffea70 0xbfffea70
esi 0x40017218 1073836568
edi 0x0 0
eip 0x40008cc2 0x40008cc2
eflags 0x210246 2163270
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x0 0
(gdb)

Вылет происходит на команде div %edi, который равен нулю :(
Есть какие-нибудь мысли?

ruslandh 23-05-2005 07:53 326477

Что-то я никаких cf_gen и cf.data в RPM squid не вижу. А вот в src.rpm нашёл. Я думаю, у вас скорей всего ошибка в построения. Как я понимаю, вы строите пакет из тарбола, попробуйте построить вначале стандартный rpm из src.rpm - этим вы и зависимости проверите и увидите по файлу spec как до вас другие строили squid. А потом уже можно свои модификации вносить.


FrIcE 26-05-2005 06:43 327361

Код:

Program received signal SIGFPE, Arithmetic exception.
Тут происходит ошибка при операциях с плавающей точкой (в сопроцессоре). Невольно вкрадываются мысли следующего плана: не отключен ли сопроцессор в ядре и не битое ли это железо?

ТОлько почему эта ошибка выскакивает при целочисленном делении, понять не могу...

Andrew S 26-05-2005 23:21 327698

Пробовал ставить src.rpm, удовлетворил все зависимости, но результат тот же.
Железо вроде не кривое, хотя иксы иногда падают. Если бы это было из-за железа, то ИМХО компилилось бы с разными глюками от случая к случаю, а ошибка проявляется всегда одна и та же.
Насчет сопроцессора - я не знаю название опции, поэтому привожу кусок файла /proc/config.gz (ядро 2.6.5-7.111, сборка не моя, а Novell). Кстати, если процессор - 586, то наверное поддержка сопроцессора должна быть по умолчанию (поскольку он встроенный), но ошибки бывают даже в таких прозрачных местах. Проц у меня P4 без HT.

CONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
# CONFIG_X86_VOYAGER is not set
# CONFIG_X86_NUMAQ is not set
# CONFIG_X86_SUMMIT is not set
# CONFIG_X86_BIGSMP is not set
# CONFIG_X86_VISWS is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_ES7000 is not set
# CONFIG_M386 is not set
# CONFIG_M486 is not set
CONFIG_M586=y
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
# CONFIG_M686 is not set
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
CONFIG_X86_GENERIC=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_L1_CACHE_SHIFT=7
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_PPRO_FENCE=y
CONFIG_X86_F00F_BUG=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_ALIGNMENT_16=y
CONFIG_X86_INTEL_USERCOPY=y
# CONFIG_HPET_TIMER is not set
# CONFIG_HPET_EMULATE_RTC is not set
# CONFIG_SMP is not set
# CONFIG_PREEMPT is not set
CONFIG_X86_UP_APIC=y
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_MCE=y
# CONFIG_X86_MCE_NONFATAL is not set
CONFIG_X86_MCE_P4THERMAL=y
CONFIG_TOSHIBA=m
CONFIG_I8K=m
CONFIG_MICROCODE=m
CONFIG_X86_MSR=m
CONFIG_X86_CPUID=m

Zur0 12-09-2005 13:19 354913

Andrew S
а с веткой 2.5 такие же проблемы?

как насчет готового пакета?


Время: 19:44.

Время: 19:44.
© OSzone.net 2001-