Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет mumuntu ([info]mumuntu)
@ 2005-08-11 12:08:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
[Help]
Платформа PPC, приложение - xorg-x11, файл xc/programs/Xserver/hw/xfree86/common/xf86Init.c
Вот такой кусок кода:

    for (i = 0; i < xf86NumScreens; i++) {
        xf86EnableAccess(xf86Screens[i]);
        if (xf86Screens[i]->PreInit &&
            xf86Screens[i]->PreInit(xf86Screens[i], 0))

            xf86Screens[i]->configured = TRUE;
    }


Если верить gdb, то получается, что перед выполнением зеленой строчки i=0, как и положено.
А перед выполнением красной строчки, ... ......, i=1.
Ой-ой-ой-ой, я, кажется, понял. Это GCC так оптимизирует.

InitOutput (pScreenInfo=0x1020b38c, argc=1, argv=0x7fb61ae4) at xf86Init.c:586
586         for (i = 0; i < xf86NumScreens; i++) {
(gdb) step
587             xf86EnableAccess(xf86Screens[i]);
(gdb) print i
$1 = 0
(gdb) step
586         for (i = 0; i < xf86NumScreens; i++) {
(gdb) print i
$2 = 0
(gdb) step
587             xf86EnableAccess(xf86Screens[i]);
(gdb) print i
$3 = 1
(gdb) step
xf86EnableAccess (pScrn=0x103e0408) at xf86Bus.c:694
694         register EntityAccessPtr peAcc = (EntityAccessPtr) pScrn->access;
(gdb)


Похоже, надо отрубать оптимизацию. Других мыслей пока нет. А у вас есть?


(Читать комментарии) - (Добавить комментарий)


[info]ex_sighup150@lj
2005-08-11 06:43 (ссылка)
Если этот указатель не проинициализирован (то бишь r0 равно нулю), то перехода туда не будет. Так что валится оно уже внутри этого PreInit наверняка.
Саш, как именно валится-то, кстати?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexclear@lj
2005-08-11 06:54 (ссылка)
SIGSEGV ловит.
Причем, что самое неприятное, там stack corruption - я не могу по корке backtrace посмотреть даже.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_sighup150@lj
2005-08-11 07:03 (ссылка)
Что за драйвер?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]alexclear@lj
2005-08-11 07:19 (ссылка)
Radeon

(Ответить) (Уровень выше)


(Читать комментарии) -