On Sun, 28 Nov 2010 19:33:54 -0500 I started this topic by saying:
I need to run X with the fvwm window manager, but the F14 X server doesn't play nice with fvwm - or with twm. When fvwm or twm calls XCreateFontSet(), the X server dies with a SIGSEGV.
To get around this, I have copied the F13 /usr/bin/Xorg server binary and /usr/lib/xorg/modules directory contents to my F14 system, and they work just fine with the F14 fvwm, F14 X libraries, and F14 fonts. While this workaround works, it's not exactly a good long term fix.
Note that this workaround means the problem is with the F14 X server or its loadable modules, not the F14 fvwm.
When twm is used, it calls XCreateFontSet() with a base_font_name_list argument different from that in the fvwm XCreateFontSet() call, and the F14 server dies, so the problem is not the font asked for by fvwm.
This gets stranger and stranger ...
Before trying to dig into the X server code, I wanted some clues about where to look, so I put this into root's .xserverrc:
#!/bin/sh exec /usr/bin/ltrace /usr/bin/Xorg :0
I deleted root's .xinitrc, .fvwmrc, and .fvwm directory and, as root (only root can ltrace /usr/bin/Xorg) I ran:
xinit fvwm 2>/tmp/Xorg.out
The ltrace output in /tmp/Xorg.out has 176 calls to memmove(), all with five arguments, like this example:
memmove(0xa352c50, 0xa3535e0, 1648, 0x806892f, 0x40001c)
Can anyone shed some light on what is going on here? The first three arguments appear to be the usual three memmove() arguments: dest, src, and count. The extra two aren't documented anywhere I can find, and memmove() has always been a three-argument function.
To further confuse things, memmove() isn't the only call with too many arguments. clock_gettime() is supposed to have two arguments, but it's called 694 times with five arguments. There may well be other calls with strange argument counts, but the output has 371800 lines, and I'm not up to examining all of them.
-- Dick St. Peters, stpeters@NetHeaven.com Gatekeeper, NetHeaven, Saratoga Springs, NY
On Mon, 29 Nov 2010 16:37:05 -0500 stpeters@NetHeaven.com (Dick St. Peters) wrote:
The ltrace output in /tmp/Xorg.out has 176 calls to memmove(), all with five arguments, like this example:
memmove(0xa352c50, 0xa3535e0, 1648, 0x806892f, 0x40001c)Can anyone shed some light on what is going on here? The first three arguments appear to be the usual three memmove() arguments: dest, src, and count. The extra two aren't documented anywhere I can find, and memmove() has always been a three-argument function.
To further confuse things, memmove() isn't the only call with too many arguments. clock_gettime() is supposed to have two arguments, but it's called 694 times with five arguments. There may well be other calls with strange argument counts, but the output has 371800 lines, and I'm not up to examining all of them.
I know nothing about X, but if it is written in C++ it is possible that the function has been overridden in a class. You would have to look in the source to see if this is true. i.e. the memmove you are looking at might not be the generic C memmove as documented in man memmove.
On Mon, Nov 29, 2010 at 04:37:05PM -0500, Dick St. Peters wrote:
The ltrace output in /tmp/Xorg.out has 176 calls to memmove(), all with five arguments, like this example:
memmove(0xa352c50, 0xa3535e0, 1648, 0x806892f, 0x40001c)Can anyone shed some light on what is going on here? The first three arguments appear to be the usual three memmove() arguments: dest, src, and count. The extra two aren't documented anywhere I can find, and memmove() has always been a three-argument function.
It looks to me as though ltrace just doesn't "know" how many arguments memmove() takes, and this can be fixed with a quick change to /etc/ltrace.conf. I went ahead and opened bug #658311 about it.
HTH,
Nalin
Nalin Dahyabhai writes:
On Mon, Nov 29, 2010 at 04:37:05PM -0500, Dick St. Peters wrote:
The ltrace output in /tmp/Xorg.out has 176 calls to memmove(), all with five arguments, like this example:
memmove(0xa352c50, 0xa3535e0, 1648, 0x806892f, 0x40001c)Can anyone shed some light on what is going on here? The first three arguments appear to be the usual three memmove() arguments: dest, src, and count. The extra two aren't documented anywhere I can find, and memmove() has always been a three-argument function.
It looks to me as though ltrace just doesn't "know" how many arguments memmove() takes, and this can be fixed with a quick change to /etc/ltrace.conf. I went ahead and opened bug #658311 about it.
Thank you for the explanation. I'm relieved that there is one.
I didn't know ltrace got the arg counts and types from a conf file, but I see /etc/ltrace.conf is mentioned in the ltrace man page.
Now I can go back to pursuing why /usr/bin/Xorg dies.
-- Dick St. Peters, stpeters@NetHeaven.com Gatekeeper, NetHeaven, Saratoga Springs, NY