Bug 47395 - [uxa] X segfaults if two monitors are connected
Summary: [uxa] X segfaults if two monitors are connected
Status: RESOLVED FIXED
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/intel (show other bugs)
Version: unspecified
Hardware: All Linux (All)
: medium blocker
Assignee: Chris Wilson
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-16 00:25 UTC by helmling
Modified: 2012-04-26 01:42 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments
Xorg log file (54.94 KB, text/plain)
2012-03-16 00:25 UTC, helmling
no flags Details
logfile for valgrind --trace-children=yes ./X -ac -noreset (99.19 KB, text/plain)
2012-03-19 00:11 UTC, helmling
no flags Details
logfile for valgrind --leak-check=full --trace-children=yes ./X -ac -noreset (175.68 KB, text/plain)
2012-03-19 00:11 UTC, helmling
no flags Details

Description helmling 2012-03-16 00:25:23 UTC
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.
Comment 1 Chris Wilson 2012-03-16 01:21:56 UTC
Attaching gdb and getting the symbols for the backtrace would be useful, and/or running X under valgrind.
Comment 2 helmling 2012-03-16 02:40:38 UTC
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
Comment 3 Chris Wilson 2012-03-16 03:04:27 UTC
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.)
Comment 4 helmling 2012-03-16 03:29:40 UTC
No problems with SNA enabled, X running flawlessly, as far as I can tell!
Comment 5 Chris Wilson 2012-03-16 03:41:40 UTC
And for completeness, can you try with your own recompiled UXA? (i.e. ./configure --disable-sna)
Comment 6 helmling 2012-03-16 03:55:47 UTC
with --disable-sna, the segfault is back, with the same debug trace as before.
Comment 7 Chris Wilson 2012-03-16 03:57:34 UTC
And whilst I have your attention... ;-)

Can you try launching X under valgrind?
Comment 8 helmling 2012-03-16 08:26:29 UTC
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)?
Comment 9 Chris Wilson 2012-03-17 04:24:24 UTC
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.
Comment 10 helmling 2012-03-19 00:11:15 UTC
Created attachment 58653 [details]
logfile for valgrind --trace-children=yes ./X -ac -noreset
Comment 11 helmling 2012-03-19 00:11:46 UTC
Created attachment 58654 [details]
logfile for valgrind --leak-check=full --trace-children=yes ./X -ac -noreset
Comment 12 helmling 2012-03-19 00:13:08 UTC
Here are the valgrind logfiles (once with and without --leak-check=full; didn't know if you'd need that).
Comment 13 Chris Wilson 2012-03-19 00:57:57 UTC
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
Comment 14 helmling 2012-03-19 01:21:31 UTC
The patch doesn't help ... with UXA, I get the same gdb output as before.
Comment 15 Chris Wilson 2012-03-19 01:32:32 UTC
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);
Comment 16 helmling 2012-03-19 01:46:56 UTC
Still no luck with this one ...
Comment 17 Chris Wilson 2012-03-19 02:11:19 UTC
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?
Comment 18 helmling 2012-03-19 02:55:02 UTC
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 ?? ()
Comment 19 Chris Wilson 2012-03-19 03:24:14 UTC
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.
Comment 20 helmling 2012-03-19 03:41:46 UTC
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)
Comment 21 Chris Wilson 2012-03-19 03:57:06 UTC
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 *$
Comment 22 helmling 2012-03-19 06:21:15 UTC
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 ?? ()
Comment 23 Chris Wilson 2012-03-19 06:53:39 UTC
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 *$
Comment 24 helmling 2012-03-19 07:05:48 UTC
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)
Comment 25 Chris Wilson 2012-03-19 07:16:13 UTC
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.
Comment 26 helmling 2012-03-19 07:24:22 UTC
(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)
Comment 27 Chris Wilson 2012-03-19 07:29:48 UTC
So the issue is simply that xf86CrtcRotate is called before xf86CrtcScreenInit. Can you put a breakpoint on each and print the backtrace?
Comment 28 helmling 2012-03-19 07:34:39 UTC
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)
Comment 29 Chris Wilson 2012-03-19 09:14:46 UTC
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*
Comment 30 helmling 2012-03-20 00:24:10 UTC
I can confirm that this fixes the problem. Thanks a lot for so rapidly taking care of the issue! :-)
Comment 31 Conner 2012-04-25 17:42:44 UTC
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.
Comment 32 Chris Wilson 2012-04-26 01:42:38 UTC
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.