Hi Frederic!
As I was still on the cooker ML, I posted problems about crashing
sawfish and harddrake. I have experimented a bit and found out some
interesting things:
- When compiling sawfish or harddrake with static libraries they do
no longer crash
- When compiling with dynamic libraries except the X Libaries, Imlib
and ungif, sawfish no longer crashes
- When compiling without X libraries, harddrake-text no longer crashes,
similar for harddrake when compiling with static X libraries.
I'm using Mandrake 7.2, but not an installation version, but a progressively
updated distribution (through Cooker and 7.2 beta).
I suppose this has something to do with the kernel I use (and I cannot
revert to 2.2.17): 2.2.18pre20, but I'm not sure as strace and ltrace
do not give me more information on this.
To repeat: harddrake crashes like this (gdb-output):
Program received signal SIGSEGV, Segmentation fault.
0x40006ee5 in _dl_lookup_symbol () from /lib/ld-linux.so.2
sawfish crashes like this:
Program received signal SIGSEGV, Segmentation fault.
0x4024bd80 in __morecore () from /lib/libc.so.6
strace output from both programs, starting with harddrake-text:
open("/usr/share/terminfo/l/linux", O_RDONLY) = 3
read(3, "\32\1\24\0\35\0\20\0}\1\324\2", 12) = 12
read(3, "linux|linux console\0", 20) = 20
read(3, "\0\1\0\0\1\1\0\0\0\0\0\0\0\1\1\0\0\0\0\0\1\0\0\0\0\0\0"..., 30) = 30
read(3, "\377\377\10\0\377\377\377\377\377\377\377\377\377\377\377"..., 32) = 32
read(3, "\377\377\0\0\2\0\4\0\25\0\32\0!\0%\0)\0\377\3774\0E\0G"..., 762) = 762
read(3, "\7\0\r\0\33[%i%p1%d;%p2%dr\0\33[3g\0\33[H\33[J"..., 724) = 724
close(3) = 0
ioctl(1, TIOCGWINSZ, 0xbffff864) = -1 ENOTTY (Inappropriate ioctl for device)
ioctl(0, TIOCGWINSZ, {ws_row=37, ws_col=100, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(1, TIOCGWINSZ, 0xbffff8d4) = -1 ENOTTY (Inappropriate ioctl for device)
ioctl(0, TIOCGWINSZ, {ws_row=37, ws_col=100, ws_xpixel=0, ws_ypixel=0}) = 0
rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [INT QUIT TSTP TTIN TTOU WINCH], [], 8) = 0
open("/dev/tty", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_STOP, {B38400 -opost isig -icanon -echo ...}) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGWINCH, {0x4007f6ec, [], SA_INTERRUPT|0x4000000}, {SIG_DFL}, 8) = 0
write(1, "\33[1;37r\33[4l\33[0;10m\33[37m\33[40m\33[1;"...,
205[1;37r[4l[0;10m[37m[40m[1;37r[H[J[1;1H[36m[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K[1;1H) = 205
rt_sigaction(SIGSEGV, {0x804ca40, [RT_30], SA_STACK|0x40641a0}, {SIG_DFL}, 8) = 0
--- SIGSEGV (Speicherzugriffsfehler) ---
--- SIGSEGV (Speicherzugriffsfehler) ---
+++ killed by SIGSEGV +++
sawfish:
open("/usr/share/i18n/locale.alias", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/de_DE/LC_MESSAGES", O_RDONLY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=66, ...}) = 0
close(3) = 0
open("/usr/share/locale/de_DE/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0
old_mmap(NULL, 44, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40063000
close(3) = 0
open("/usr/share/locale/de_DE/LC_MONETARY", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=94, ...}) = 0
old_mmap(NULL, 94, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40064000
close(3) = 0
open("/usr/share/locale/de_DE/LC_COLLATE", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=29970, ...}) = 0
old_mmap(NULL, 29970, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40065000
close(3) = 0
open("/usr/share/locale/de_DE/LC_TIME", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=492, ...}) = 0
old_mmap(NULL, 492, PROT_READ, MAP_PRIVATE, 3, 0) = 0x4006d000
close(3) = 0
open("/usr/share/locale/de_DE/LC_NUMERIC", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=27, ...}) = 0
old_mmap(NULL, 27, PROT_READ, MAP_PRIVATE, 3, 0) = 0x4006e000
close(3) = 0
open("/usr/share/locale/de_DE/LC_CTYPE", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=87756, ...}) = 0
old_mmap(NULL, 87756, PROT_READ, MAP_PRIVATE, 3, 0) = 0x403ae000
close(3) = 0
brk(0x8146000) = 0x8146000
rt_sigaction(SIGFPE, {0x400532d0, [RT_30], 0x4000000}, {SIG_DFL}, 8) = 0
--- SIGSEGV (Speicherzugriffsfehler) ---
ltrace output of the programs, hardrake-text:
xmlGetProp(0x08089f70, 0x0805e70e, 0x08076da4, 0x08057019, 0x08076da0) = 0x0808f038
xmlGetProp(0x0808a128, 0x0805e6f7, 0x0805427a, 0x08089f70, 0x0805e70e) = 0x0808f048
str2device(0x0808f048, 0x0808a128, 0x0805e6f7, 0x0805427a, 0x08089f70) = 22
xmlGetProp(0x0808a128, 0x0805e705, 0x08076da4, 0x08057019, 0x08076da0) = 0x0808f058
xmlGetProp(0x0808a128, 0x0805e70e, 0x080541b0, 0x0808a128, 0x0805e705) = 0x0808f068
malloc(1) = 0x0808f078
xmlGetProp(0x0808a128, 0x0805e70e, 0x08076da4, 0x08057019, 0x08076da0) = 0x0808f088
free(0x08076f90) = <void>
xmlFreeDoc(0x080871b0, 0x0808a128, 0x08076da0, 0x08054319, 0x08076f90) = 0x080871e8
free(NULL) = <void>
getuid() = 0
__dcgettext(NULL, "(c)2000 MandrakeSoft", 5) = "\2512000 MandrakeSoft"
__dcgettext(NULL, "HardDrake", 5) = "HardDrake"
sprintf(" HardDrake 0.9.3 \2512000 Mandra"..., " %s %s %s ", "HardDrake",
"0.9.3", "\2512000 MandrakeSoft") = 40
newtInit(0xbffff9d4, 1, 0x40425933, 0xbffff9a8, 0x080758f0) = 0
newtSetColors(0x0805c912, 0x0805c90c, 0x0805c90c, 0x0805c907, 0x0805c901) = 0x404650f8
newtCls(0xbffff9d4, 1, 0x40425933, 0xbffff9a8,
0x080758f0[1;37r[4l[0;10m[37m[40m[1;37r[H[J[1;1H[36m[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K
[K[1;1H) = 0
newtDrawRootText(0, 0, 0x080758f0, 0x0804cc1d, 0xbffff9d4) = 0x4048cd00
newtSetSuspendCallback(0x0804cc80, 0, 0x080758f0, 0x0804cc1d, 0xbffff9d4) = 0x0804cc80
signal(11, 0x0804ca40 <unfinished ...>
--- SIGSEGV (Speicherzugriffsfehler) ---
--- SIGSEGV (Speicherzugriffsfehler) ---
+++ killed by SIGSEGV +++
sawfish output with static librep:
__libc_start_main(0x08070d0c, 1, 0xbffff9e4, 0x0805e924, 0x0809c414 <unfinished ...>
__register_frame_info(0x080a8d6c, 0x080a945c, 0xbffff988, 0x4022893c, 0x402e9680) =
0x40035008
setlocale(6, "") = "de_DE"
setlocale(1, "C") = "C"
malloc(4119) = 0x080ae728
malloc(60) = 0x080af748
malloc(60) = 0x080af788
malloc(60) = 0x080af7c8
malloc(60) = 0x080af808
malloc(60) = 0x080af848
malloc(60) = 0x080af888
malloc(60) = 0x080af8c8
malloc(60) = 0x080af908
malloc(60) = 0x080af948
malloc(60) = 0x080af988
malloc(60) = 0x080af9c8
malloc(60) = 0x080afa08
malloc(60) = 0x080afa48
malloc(60) = 0x080afa88
signal(8, 0x08098734 <unfinished ...>
--- SIGSEGV (Speicherzugriffsfehler) ---
+++ killed by SIGSEGV +++
ltrace with -S option for sawfish:
SYS_open("/usr/share/locale/de_DE/LC_CTYPE", 0, 00) = 3
SYS_fstat(3, 0xbffff72c, 3, 0xbffff7c4, 3) = 0
SYS_mmap(0xbffff764, 0, 0x402e9680, 0x402ea1c0, 0x080ae508) = 0x403b8000
SYS_close(3) = 0
<... setlocale resumed> ) = "de_DE"
setlocale(1, "C") = "C"
malloc(4119 <unfinished ...>
SYS_brk(0x080b1000) = 0x080b1000
<... malloc resumed> ) = 0x080ae728
malloc(60) = 0x080af748
malloc(60) = 0x080af788
malloc(60) = 0x080af7c8
malloc(60) = 0x080af808
malloc(60) = 0x080af848
malloc(60) = 0x080af888
malloc(60) = 0x080af8c8
malloc(60) = 0x080af908
malloc(60) = 0x080af948
malloc(60) = 0x080af988
malloc(60) = 0x080af9c8
malloc(60) = 0x080afa08
malloc(60) = 0x080afa48
malloc(60) = 0x080afa88
signal(8, 0x08098734 <unfinished ...>
SYS_rt_sigaction(8, 0xbffff7bc, 0xbffff730, 8, 8) = 0
--- SIGSEGV (Speicherzugriffsfehler) ---
+++ killed by SIGSEGV +++
I tried older and the current version from sawfish, but this makes
no difference, the crash is not related to the version I use.
If you need more information, just tell me.
I considered contacting the kernel mailing list or the sawfish mailing list about
the problem, but as long as I'm not sure about the crash reason I better don't do it.
Until the problem is solved I'm using the static versions of the programs.
One more question:
When I start a program from gdb I get the following message
(gdb) r
Starting program: /usr/src/RPM/BUILD/sawfish-0.32/src/sawfish
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Does anyone know how I can get gdb to find the dl breakpoint functions ?
Best regards,
Reinhard Katzmann
--
E-Mail: [EMAIL PROTECTED]
New GnuPG Public Key available on request
Projekte: Datenbank und -schnittstelle f�r einen Fledermausroboter
Datenbankanbindung und Demonstrationsserver f�r Pincity
PGP signature