Created attachment 58539 [details] Xorg log file After upgrading intel drivers from 7.11 to 8.0 on Arch Linux, the X server crashes on start if two monitors are connected (laptop plus external screen), with this in the log: [ 9.047] [ 9.047] Backtrace: [ 9.047] 0: /usr/bin/Xorg (xorg_backtrace+0x34) [0x567da4] [ 9.047] 1: /usr/bin/Xorg (0x400000+0x16b8b9) [0x56b8b9] [ 9.047] 2: /lib/libpthread.so.0 (0x7ff74f24f000+0xf270) [0x7ff74f25e270] [ 9.047] [ 9.047] Segmentation fault at address (nil) [ 9.047] Fatal server error: [ 9.047] Caught signal 11 (Segmentation fault). Server aborting [ 9.047] In my case, I don't even get to see the GDM login manager; others seem to have similar problems as soon as gnome-session starts: https://bbs.archlinux.org/viewtopic.php?id=137593 https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-evdev/+bug/921236 I am not sure if the Intel driver is the problem; the launchpad bug suggests it's evdev but I am not experiencing the same behavior as described in that bug. I have also tried installing xf86-input-evdev-git, which didn't help. Only "solutions" so far: - downgrade to 7.11, - don't use external monitor Using the vesa driver, the X server does not crash (which indicates that the intel-drivers are in fact causing the problem), however the screen looks pretty garbaged with vesa. Complete Xorg.0.log is attached; please let me know how I can provide further useful information.
Attaching gdb and getting the symbols for the backtrace would be useful, and/or running X under valgrind.
Okay, after recompiling some X packages with debugging symbols, then following http://www.x.org/wiki/Development/Documentation/ServerDebugging#Debugging_with_one_machine I get the following output. [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.9-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.9-1-ARCH #1 SMP PREEMPT Thu Mar 1 09:31:13 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 16 March 2012 10:00:15AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Fri Mar 16 10:33:47 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () #0 0x0000000000000000 in ?? () No symbol table info available. #1 0x00000000004a873c in xf86RotateBlockHandler (screenNum=0, blockData=0x0, pTimeout=0x7fff0ad43458, pReadmask=0x7d80e0) at xf86Rotate.c:274 pScreen = <optimized out> pScrn = <optimized out> xf86_config = <optimized out> #2 0x00007fd354df7471 in I830BlockHandler (i=<optimized out>, blockData=<optimized out>, pTimeout=<optimized out>, pReadmask=<optimized out>) at intel_driver.c:750 screen = 0x1fcaad0 scrn = <optimized out> intel = 0x1fb2cd0 #3 0x00000000004352b7 in BlockHandler (pTimeout=0x7fff0ad43458, pReadmask=0x7d80e0) at dixutils.c:392 i = <optimized out> j = <optimized out> #4 0x0000000000558b7d in WaitForSomething (pClientsReady=0x3f1a640) at WaitFor.c:219 i = <optimized out> waittime = {tv_sec = 600, tv_usec = 0} wt = 0x7fff0ad43440 timeout = <optimized out> clientsReadable = {fds_bits = {0 <repeats 16 times>}} clientsWritable = {fds_bits = {0, 214748364811, 472446402651, 532575944823, 0, 140545673819648, 160, 40, 4, 66516784, 0, 1, 0, 944, 0, 1}} curclient = <optimized out> selecterr = <optimized out> nready = 0 devicesReadable = {fds_bits = {472446402652, 532575944823, 33300096, 66151408, 140545673819648, 960, 16400, 66152368, 960, 140545670543604, 33291568, 140545673819648, 1040, 8220952, 1024, 140733375067688}} now = <optimized out> someReady = <optimized out> #5 0x0000000000431815 in Dispatch () at dispatch.c:366 clientReady = 0x3f1a640 result = <optimized out> client = <optimized out> nready = <optimized out> icheck = 0x7d14c0 start_tick = <optimized out> #6 0x0000000000421bc0 in main (argc=1, argv=0x7fff0ad43628, envp=<optimized out>) at main.c:287 i = <optimized out> alwaysCheckForInput = {0, 1} Backtrace: 0: /usr/bin/Xorg (xorg_backtrace+0x3a) [0x55b32a] 1: /usr/bin/Xorg (0x400000+0x15eb6a) [0x55eb6a] 2: /lib/libpthread.so.0 (0x7fd357d37000+0xf270) [0x7fd357d46270] Segmentation fault at address (nil) Fatal server error: Caught signal 11 (Segmentation fault). Server aborting Please consult the The X.Org Foundation support at http://wiki.x.org for help. Please also check the log file at "/var/log/Xorg.0.log" for additional information. Server terminated with error (1). Closing log file. Program received signal SIGABRT, Aborted. 0x00007fd356c00975 in raise () from /lib/libc.so.6
This looks very much like the Xserver bug supposedly fixed in the 1.12 cycle, odd. Can you confirm if this also affects sna? (Recompile -intel with ./configure --enable-sna.)
No problems with SNA enabled, X running flawlessly, as far as I can tell!
And for completeness, can you try with your own recompiled UXA? (i.e. ./configure --disable-sna)
with --disable-sna, the segfault is back, with the same debug trace as before.
And whilst I have your attention... ;-) Can you try launching X under valgrind?
I didn't have much time to tes valgrind yet; will need to complete this on monday. What I noticed is that just running "valgrind X" causes my system to completely freeze. Is there any trick for valgrinding X (special command-line option or the like)?
Hmm, shouldn't lock your system up (hopefully it was just being unresponsive). I tend to ssh in, cp /usr/bin/X .; sudo valgrind --trace-children=yes ./X -ac -noreset The copy is to remove the setuid that valgrind will complain about and refuse to run.
Created attachment 58653 [details] logfile for valgrind --trace-children=yes ./X -ac -noreset
Created attachment 58654 [details] logfile for valgrind --leak-check=full --trace-children=yes ./X -ac -noreset
Here are the valgrind logfiles (once with and without --leak-check=full; didn't know if you'd need that).
So the difference between UXA and SNA in this case, is that UXA tidies up the outputs upon screen close and server regeneration, SNA doesn't because that code is buggy ;-) Can you try this patch to the xserver: diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c index ff7000b..0c9123e 100644 --- a/hw/xfree86/modes/xf86Rotate.c +++ b/hw/xfree86/modes/xf86Rotate.c @@ -313,6 +313,12 @@ xf86RotateDestroy (xf86CrtcPtr crtc) DamageDestroy (xf86_config->rotation_damage); xf86_config->rotation_damage = NULL; } + + if (xf86_config->BlockHandler) + { + pScreen->BlockHandler = xf86_config->BlockHandler; + xf86_config->BlockHandler = NULL; + } } void
The patch doesn't help ... with UXA, I get the same gdb output as before.
Hmm, it looked like that was on the right track. Back to the hypothesis that the difference between SNA and UXA that matters is: diff --git a/src/intel_display.c b/src/intel_display.c index 11d0e2b..e61af86 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -1680,6 +1680,7 @@ intel_mode_fini(intel_screen_private *intel) { struct intel_mode *mode = intel->modes; +#if 0 while(!list_is_empty(&mode->crtcs)) { xf86CrtcDestroy(list_first_entry(&mode->crtcs, struct intel_crtc, @@ -1691,6 +1692,7 @@ intel_mode_fini(intel_screen_private *intel) struct intel_output, link)->output); } +#endif if (mode->fb_id) drmModeRmFB(mode->fd, mode->fb_id);
Still no luck with this one ...
Then I'm not seeing how config->BlockHandler is set to NULL. Can you launch X under gdb, set a breakpoint on xf86RotateBlockHandler and then a watchpoint on xf86_config->BlockHandler?
Here's my gdb session. Had to "set can-use-hw-breakpoints 0", don't know if this is a problem. :-) Also, I had to recompile with -O0 instead of -O1, otherwise gdb would report that xf86_config->BlockHandler is optimized out. I don't have any experience using gdb; hope this is of any use for you ... # gdb X GNU gdb (GDB) 7.4 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/X...done. (gdb) break xf86RotateBlockHandler Breakpoint 1 at 0x4ab16c: file xf86Rotate.c, line 267. (gdb) set can-use-hw-watchpoints 0 (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 10:51:22 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Breakpoint 1, xf86RotateBlockHandler (screenNum=0, blockData=0x0, pTimeout=0x7fffc47c4d38, pReadmask=0x7dc0c0) at xf86Rotate.c:267 267 ScreenPtr pScreen = screenInfo.screens[screenNum]; (gdb) watch xf86_config->BlockHandler Watchpoint 2: xf86_config->BlockHandler (gdb) continue Continuing. Watchpoint 2: xf86_config->BlockHandler Old value = <unreadable> New value = (ScreenBlockHandlerProcPtr) 0 xf86RotateBlockHandler (screenNum=0, blockData=0x0, pTimeout=0x7fffc47c4d38, pReadmask=0x7dc0c0) at xf86Rotate.c:272 272 rotation_active = xf86RotateRedisplay(pScreen); (gdb) continue Continuing. Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? ()
The very first time we enter xf86RotateBlockHandler we die. Hmm. Let's look at pScreen->BlockHandler instead, put a breakpoint on I830ScreenInit and then a watch on pScreen->BlockHandler.
I guess you mean screen->BlockHandler instead of pScreen->BlockHandler which isn't defined? After recompiling also the intel-driver with -O0 (with -O1, gdb eats 100% cpu when continuing after the watchpoint is set), the following results: [root@utahraptor ~]# gdb X GNU gdb (GDB) 7.4 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/X...done. (gdb) break I830ScreenInit Function "I830ScreenInit" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (I830ScreenInit) pending. (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 11:38:53 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] Breakpoint 1, I830ScreenInit (scrnIndex=0, screen=0x9d9aa0, argc=1, argv=0x7fff084ed4a8) at intel_driver.c:924 924 ScrnInfoPtr scrn = xf86Screens[screen->myNum]; (gdb) watch screen->BlockHandler Hardware watchpoint 2: screen->BlockHandler (gdb) continue Continuing. Hardware watchpoint 2: screen->BlockHandler Old value = (ScreenBlockHandlerProcPtr) 0 New value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> miScreenInit (pScreen=0x9d9aa0, pbits=0x0, xsize=<optimized out>, ysize=<optimized out>, dpix=<optimized out>, dpiy=<optimized out>, width=1920, rootDepth=24, numDepths=7, depths=0x9d92e0, rootVisual=33, numVisuals=2, visuals=0x9d5e00) at miscrinit.c:267 267 pScreen->WakeupHandler = (ScreenWakeupHandlerProcPtr)NoopDDA; (gdb) c Continuing. Hardware watchpoint 2: screen->BlockHandler Old value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> New value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> 0x00000000004ab9d7 in xf86CrtcRotate (crtc=0x9cfc90) at xf86Rotate.c:475 475 pScreen->BlockHandler = xf86RotateBlockHandler; (gdb) c Continuing. Hardware watchpoint 2: screen->BlockHandler Old value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> New value = (ScreenBlockHandlerProcPtr) 0x7fa066d73c1e <I830BlockHandler> I830ScreenInit (scrnIndex=0, screen=0x9d9aa0, argc=1, argv=0x7fff084ed4a8) at intel_driver.c:1026 1026 if (!AddCallback(&FlushCallback, intel_flush_callback, scrn)) (gdb) c Continuing. Watchpoint 2 deleted because the program has left the block in which its expression is valid. 0x0000000000431e27 in AddScreen (pfnInit=0x7fa066d741f6 <I830ScreenInit>, argc=1, argv=0x7fff084ed4a8) at dispatch.c:3909 3909 if (!(*pfnInit)(i, pScreen, argc, argv)) (gdb) c Continuing. The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb)
So it looks valid when we set it up, now we just need to keep watching afterwards. Instead of watching screen->BlockHander, try finding the address of screen->BlockHandler and watching that memory location. Something like: p &screen->BlockerHandler; watch *$
Here we go... # gdb X GNU gdb (GDB) 7.4 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/X...done. (gdb) break I830ScreenInit Function "I830ScreenInit" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (I830ScreenInit) pending. (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 14:19:18 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] Breakpoint 1, I830ScreenInit (scrnIndex=0, screen=0x178caa0, argc=1, argv=0x7fff1338fb78) at intel_driver.c:924 924 ScrnInfoPtr scrn = xf86Screens[screen->myNum]; (gdb) p &screen->BlockHandler $1 = (ScreenBlockHandlerProcPtr *) 0x178ccb8 (gdb) watch *$ Hardware watchpoint 2: *$ (gdb) continue Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0 New value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> miScreenInit (pScreen=0x178caa0, pbits=0x0, xsize=<optimized out>, ysize=<optimized out>, dpix=<optimized out>, dpiy=<optimized out>, width=1920, rootDepth=24, numDepths=7, depths=0x178c2e0, rootVisual=33, numVisuals=2, visuals=0x1788e00) at miscrinit.c:267 267 pScreen->WakeupHandler = (ScreenWakeupHandlerProcPtr)NoopDDA; (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> New value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> 0x00000000004ab9d7 in xf86CrtcRotate (crtc=0x1782c90) at xf86Rotate.c:475 475 pScreen->BlockHandler = xf86RotateBlockHandler; (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> New value = (ScreenBlockHandlerProcPtr) 0x7fb07ccd5c1e <I830BlockHandler> I830ScreenInit (scrnIndex=0, screen=0x178caa0, argc=1, argv=0x7fff1338fb78) at intel_driver.c:1026 1026 if (!AddCallback(&FlushCallback, intel_flush_callback, scrn)) (gdb) c Continuing. The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7fb07ccd5c1e <I830BlockHandler> New value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> I830BlockHandler (i=0, blockData=0x0, pTimeout=0x7fff1338f9a8, pReadmask=0x7dc0c0) at intel_driver.c:750 750 (*screen->BlockHandler) (i, blockData, pTimeout, pReadmask); (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4ab155 <xf86RotateBlockHandler> New value = (ScreenBlockHandlerProcPtr) 0 xf86RotateBlockHandler (screenNum=0, blockData=0x0, pTimeout=0x7fff1338f9a8, pReadmask=0x7dc0c0) at xf86Rotate.c:274 274 (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? ()
Right... So it is xf86_config->BlockHandler that is NULL, but afaics from that trace it should be NoopDDA. One last go, break on xf86CrtcRotate and then p &xf86_config->BlockHandler; watch *$
That method seems to get called quite often ... ~]# gdb X GNU gdb (GDB) 7.4 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/X...done. (gdb) break xf86CrtcRotate Breakpoint 1 at 0x4ab667: file xf86Rotate.c, line 385. (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 15:03:46 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] Breakpoint 1, xf86CrtcRotate (crtc=0x23a1fe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) p &xf86_config->BlockHandler $1 = (ScreenBlockHandlerProcPtr *) 0x7f8972ee8740 (gdb) watch *$ Hardware watchpoint 2: *$ (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x23a2c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x3f155d0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x3f155d0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x23a1fe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x23a2c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. cHardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x23a9180 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x23a9180 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x3f42a90 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x3f42a90 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x3f42e30 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x3f42e30 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40705e0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40705e0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40714e0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40714e0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40a2170 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40a2170 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40a3460 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40a3460 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40a8c30 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40a8c30 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40adc40 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40adc40 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40b3440 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40b3440 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40b8480 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40b8480 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x406ca90 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x406ca90 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40c6830 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40c6830 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40cc030 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40cc030 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40d1810 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40d1810 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40dc340 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40dc340 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40e77c0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40e77c0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40ecb60 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40ecb60 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40c3af0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40c3af0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x410aaa0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x410aaa0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x410c590 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x410c590 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4117590 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4117590 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41236e0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41236e0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4100a20 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4100a20 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4101920 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4101920 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4144ec0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4144ec0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4149d90 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4149d90 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x414f030 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x414f030 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4154c30 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4154c30 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4156250 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4156250 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x415b1b0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x415b1b0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41601d0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41601d0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4165550 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4165550 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x416a910 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x416a910 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x40fcef0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x40fcef0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4179020 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4179020 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x417e820 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x417e820 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4189360 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4189360 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4194050 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4194050 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41996f0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41996f0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x4170bb0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4170bb0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41c7bf0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41c7bf0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41c9600 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41c9600 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41fb9c0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x41fb9c0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x41fb9c0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server cHardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> New value = (ScreenBlockHandlerProcPtr) 0x436d6f0 0x00007f8972bc729e in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x436d6f0 New value = (ScreenBlockHandlerProcPtr) 0x7f8972ee8728 <main_arena+296> 0x00007f8972bc77e6 in _int_malloc () from /lib/libc.so.6 (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb)
Ah, in this case I believe the watchpoint was set too earlier, before xf86_config had been initialised, so we are just watching a random address from the stack. After breaking on xf86RotateDisplay, move on to the next line a few times until you see the assignment to xf86_config is completed.
(gdb) break xf86CrtcRotate Breakpoint 1 at 0x4ab667: file xf86Rotate.c, line 385. (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 15:23:31 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] Breakpoint 1, xf86CrtcRotate (crtc=0x1c9ffe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) s 386 xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); (gdb) s 388 ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex]; (gdb) p &xf86_config->BlockHandler $1 = (ScreenBlockHandlerProcPtr *) 0x1c9fe38 (gdb) watch *$ Hardware watchpoint 2: *$ (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x1ca0c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0 New value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> xf86CrtcRotate (crtc=0x1ca0c90) at xf86Rotate.c:475 475 pScreen->BlockHandler = xf86RotateBlockHandler; (gdb) c Continuing. Hardware watchpoint 2: *$ Old value = (ScreenBlockHandlerProcPtr) 0x4352df <NoopDDA> New value = (ScreenBlockHandlerProcPtr) 0 xf86CrtcScreenInit (screen=0x1caaaa0) at xf86Crtc.c:815 815 _xf86_di_dga_init_internal(screen); (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x1c9ffe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x1ca0c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) c Continuing. The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb)
So the issue is simply that xf86CrtcRotate is called before xf86CrtcScreenInit. Can you put a breakpoint on each and print the backtrace?
not sure which backtrace you need, so here are all of them. :) (gdb) delete 2 (gdb) break xf86CrtcScreenInit Breakpoint 3 at 0x49f37f: file xf86Crtc.c, line 774. (gdb) run Starting program: /usr/bin/X [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/libthread_db.so.1". X.Org X Server 1.12.0 Release Date: 2012-03-04 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.2.11-1-ARCH x86_64 Current Operating System: Linux utahraptor 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-linux root=/dev/mapper/ssdvg-arch ro quiet Build Date: 19 March 2012 10:45:43AM Current version of pixman: 0.24.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Mon Mar 19 15:32:58 2012 (==) Using config directory: "/etc/X11/xorg.conf.d" [tcsetpgrp failed in terminal_inferior: Die Operation ist nicht erlaubt] Breakpoint 1, xf86CrtcRotate (crtc=0x17d0fe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) backtrace #0 xf86CrtcRotate (crtc=0x17d0fe0) at xf86Rotate.c:385 #1 0x00007f53f24923dc in intel_crtc_apply (crtc=0x17d0fe0) at intel_display.c:370 #2 0x00007f53f24927f1 in intel_crtc_set_mode_major (crtc=0x17d0fe0, mode=0x17d10c8, rotation=1, x=0, y=0) at intel_display.c:461 #3 0x00000000004a0d29 in xf86CrtcSetModeTransform (crtc=0x17d0fe0, mode=0x17d10c8, rotation=1, transform=0x0, x=0, y=0) at xf86Crtc.c:303 #4 0x00000000004a1524 in xf86SetDesiredModes (scrn=0x17c3660) at xf86Crtc.c:2677 #5 0x00007f53f2497ab7 in I830EnterVT (scrnIndex=0, flags=0) at intel_driver.c:1149 #6 0x00007f53f24975f0 in I830ScreenInit (scrnIndex=0, screen=0x17dbaa0, argc=1, argv=0x7fff2404e4c8) at intel_driver.c:1020 #7 0x0000000000431e27 in AddScreen (pfnInit=0x7f53f24971f6 <I830ScreenInit>, argc=1, argv=0x7fff2404e4c8) at dispatch.c:3909 #8 0x000000000046db85 in InitOutput (pScreenInfo=0x7db0c0, argc=1, argv=0x7fff2404e4c8) at xf86Init.c:817 #9 0x00000000004219e3 in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:204 (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x17d1c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) backtrace #0 xf86CrtcRotate (crtc=0x17d1c90) at xf86Rotate.c:385 #1 0x00007f53f24923dc in intel_crtc_apply (crtc=0x17d1c90) at intel_display.c:370 #2 0x00007f53f24927f1 in intel_crtc_set_mode_major (crtc=0x17d1c90, mode=0x17d1d78, rotation=1, x=1920, y=0) at intel_display.c:461 #3 0x00000000004a0d29 in xf86CrtcSetModeTransform (crtc=0x17d1c90, mode=0x17d1d78, rotation=1, transform=0x0, x=1920, y=0) at xf86Crtc.c:303 #4 0x00000000004a1524 in xf86SetDesiredModes (scrn=0x17c3660) at xf86Crtc.c:2677 #5 0x00007f53f2497ab7 in I830EnterVT (scrnIndex=0, flags=0) at intel_driver.c:1149 #6 0x00007f53f24975f0 in I830ScreenInit (scrnIndex=0, screen=0x17dbaa0, argc=1, argv=0x7fff2404e4c8) at intel_driver.c:1020 #7 0x0000000000431e27 in AddScreen (pfnInit=0x7f53f24971f6 <I830ScreenInit>, argc=1, argv=0x7fff2404e4c8) at dispatch.c:3909 #8 0x000000000046db85 in InitOutput (pScreenInfo=0x7db0c0, argc=1, argv=0x7fff2404e4c8) at xf86Init.c:817 #9 0x00000000004219e3 in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:204 (gdb) c Continuing. Breakpoint 3, xf86CrtcScreenInit (screen=0x17dbaa0) at xf86Crtc.c:774 774 { (gdb) backtrace #0 xf86CrtcScreenInit (screen=0x17dbaa0) at xf86Crtc.c:774 #1 0x00007f53f24976cb in I830ScreenInit (scrnIndex=0, screen=0x17dbaa0, argc=1, argv=0x7fff2404e4c8) at intel_driver.c:1036 #2 0x0000000000431e27 in AddScreen (pfnInit=0x7f53f24971f6 <I830ScreenInit>, argc=1, argv=0x7fff2404e4c8) at dispatch.c:3909 #3 0x000000000046db85 in InitOutput (pScreenInfo=0x7db0c0, argc=1, argv=0x7fff2404e4c8) at xf86Init.c:817 #4 0x00000000004219e3 in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:204 (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x17d0fe0) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) backtrace #0 xf86CrtcRotate (crtc=0x17d0fe0) at xf86Rotate.c:385 #1 0x00007f53f24923dc in intel_crtc_apply (crtc=0x17d0fe0) at intel_display.c:370 #2 0x00007f53f2494a38 in intel_xf86crtc_resize (scrn=0x17c3660, width=3200, height=1080) at intel_display.c:1424 #3 0x00000000004a8f60 in xf86RandR12ScreenSetSize (pScreen=0x17dbaa0, width=3200, height=1080, mmWidth=846, mmHeight=285) at xf86RandR12.c:707 #4 0x00000000004a9cd1 in xf86RandR12CreateScreenResources (pScreen=0x17dbaa0) at xf86RandR12.c:841 #5 0x000000000049e9f4 in xf86CrtcCreateScreenResources (screen=0x17dbaa0) at xf86Crtc.c:728 #6 0x0000000000421a4b in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:216 (gdb) c Continuing. Breakpoint 1, xf86CrtcRotate (crtc=0x17d1c90) at xf86Rotate.c:385 385 ScrnInfoPtr pScrn = crtc->scrn; (gdb) backtrace #0 xf86CrtcRotate (crtc=0x17d1c90) at xf86Rotate.c:385 #1 0x00007f53f24923dc in intel_crtc_apply (crtc=0x17d1c90) at intel_display.c:370 #2 0x00007f53f2494a38 in intel_xf86crtc_resize (scrn=0x17c3660, width=3200, height=1080) at intel_display.c:1424 #3 0x00000000004a8f60 in xf86RandR12ScreenSetSize (pScreen=0x17dbaa0, width=3200, height=1080, mmWidth=846, mmHeight=285) at xf86RandR12.c:707 #4 0x00000000004a9cd1 in xf86RandR12CreateScreenResources (pScreen=0x17dbaa0) at xf86RandR12.c:841 #5 0x000000000049e9f4 in xf86CrtcCreateScreenResources (screen=0x17dbaa0) at xf86Crtc.c:728 #6 0x0000000000421a4b in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:216 (gdb) c Continuing. The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)" > Using last definition for duplicate fields > Warning: Type "ONE_LEVEL" has 1 levels, but <LSGT> has 4 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <BKSL> has 2 symbols > Ignoring extra symbols > Warning: Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols > Ignoring extra symbols Errors from xkbcomp are not fatal to the X server Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) backtrace #0 0x0000000000000000 in ?? () #1 0x00000000004ab20b in xf86RotateBlockHandler (screenNum=0, blockData=0x0, pTimeout=0x7fff2404e2f8, pReadmask=0x7dc0c0) at xf86Rotate.c:274 #2 0x00007f53f2496cb1 in I830BlockHandler (i=0, blockData=0x0, pTimeout=0x7fff2404e2f8, pReadmask=0x7dc0c0) at intel_driver.c:750 #3 0x0000000000435327 in BlockHandler (pTimeout=0x7fff2404e2f8, pReadmask=0x7dc0c0) at dixutils.c:392 #4 0x000000000055b9cd in WaitForSomething (pClientsReady=0x379c840) at WaitFor.c:219 #5 0x0000000000431885 in Dispatch () at dispatch.c:366 #6 0x0000000000421c30 in main (argc=1, argv=0x7fff2404e4c8, envp=<optimized out>) at main.c:287 (gdb)
commit 1c2932e9cb283942567c3dd2695d03b8045da27f Author: Chris Wilson <chris@chris-wilson.co.uk> Date: Mon Mar 19 15:51:43 2012 +0000 uxa: Defer the call to EnterVT till after outputs are initialised We need to do this apparently or else we never perform the VT switch. However, we can not do it too early, especially not before we have finished intialising the outputs. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47395 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> *fingers crossed*
I can confirm that this fixes the problem. Thanks a lot for so rapidly taking care of the issue! :-)
I do not think this bug is fixed. I am changing status the to reopened and I apologise if that is inappropriate but as you can see here: https://bugs.archlinux.org/task/29285, it does not seem to be fixed.
You need to present some evidence (a backtrace for starters) that you have this highly particular bug. The exact bug as described here is fixed.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.