Using gcc with -O3 failes to compile the current version of hw/xfree86/modes/xf86EdidModes.c.
With this optimization level gcc notices, that the loop in function DDCModesFromEstIII() would go until i=5 and j=1 which would result in m = (5 * 8) + (7 - 1) = 46, but the array EstIIIModes[] only contains 44 elements. The following patch fixes this by adding 4 dummy elements to the array so that for each 6 * 8 bits from the est_iii field a mode is defined. Additionally the patch fixes the loop for (j = 7; j > 0; j--) to run until 0, otherwise the last mode of each byte will always be skipped. I had opened Bug https://bugs.freedesktop.org/show_bug.cgi?id=45623 for this and you can find the patch there too. Signed-off-by: Torsten Kaiser <[email protected]> --- a/hw/xfree86/modes/xf86EdidModes.c.orig 2012-02-08 22:00:45.805914457 +0100 +++ b/hw/xfree86/modes/xf86EdidModes.c 2012-02-08 22:02:49.615915120 +0100 @@ -731,6 +731,11 @@ { 1920, 1200, 85, 0 }, { 1920, 1440, 60, 0 }, { 1920, 1440, 75, 0 }, + /* fill up last byte */ + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,0 }, + { 0,0,0,0 }, }; static DisplayModePtr @@ -740,10 +745,11 @@ int i, j, m; for (i = 0; i < 6; i++) { - for (j = 7; j > 0; j--) { + for (j = 7; j >= 0; j--) { if (est[i] & (1 << j)) { m = (i * 8) + (7 - j); - modes = xf86ModesAdd(modes, + if (EstIIIModes[m].w) + modes = xf86ModesAdd(modes, FindDMTMode(EstIIIModes[m].w, EstIIIModes[m].h, EstIIIModes[m].r, _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
