The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Утечка исходных текстов браузера Opera 12.15, opennews (??), 14-Янв-17, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


159. "Не работает jit на arm :("  +/
Сообщение от Анончик (?), 17-Янв-17, 13:26 
>> ещё у него есть проблемы со встроенным аллокатором, которые могут проявиться при
>> сборке без дебага.
> это баг gcc5+, который косячит, выкидывая нужное. решается стратегическим `
> if (data.attrs) printf(" \x08"); else printf(" \x08");`, например.
> а код для арм там кривой. ну и фиг с ним.

Что-то я туплю, но где именно оно там падает? Вруг можно без хака с флагом пофиксить?

Ответить | Правка | Наверх | Cообщить модератору

160. "Не работает jit на arm :("  +2 +/
Сообщение от arisu (ok), 17-Янв-17, 13:44 
> Что-то я туплю, но где именно оно там падает? Вруг можно без
> хака с флагом пофиксить?

оно падает где‐то во глубине сибирских руд^w^w delete, куда оно зачем‐то попадает с `data.attrs == NULL`, а попадать туда оно не должно, потому что delete должно быть толерантно к нулам.

причём падаем именно в этом одном конкретном месте, больше я нигде подобных падений не выловил. так что это не баг в оперном delete (я даже не уверен, что они его перекрывают — по‐моему, нет), это баг в оптимизаторе. дополнительно можно убедиться, что именно оптимизатор, если вспомнить, что -O0 не падает.

соответственно, компилятор у нас дохрена умный, и
if (data.attr) delete data.attr[];
не работает, потому что компилятор знает, что delete безопасно вызывать с нулами, и проверку нафиг аннигилирует.

поскольку про флаг я не знал, не знал, а потом вдруг забыл, то я просто вставил вызов функции с сайд‐эффектом, и это помогло.

дизасм я не смотрел, но судя по всему где‐то облажался register allocator.


p.s.: -O2 лажает точно так же, как и -O3. я всё равно на всякий случай понизил до -O2 — целее будем.

p.p.s.: я сильно подозреваю, что это очередной случай, когда компилятор тупо считает: «программ с UB нет и быть не может». там выше цикл, который снимает у attr атрибут внутренней очистки, и в принципе, он без охраны. поэтому компилятор вправе считать, что после цикла data.attr никогда не NULL, даже если цикл в принципе выполнился ноль раз (а после вызова функции, в которую компилятор не может заглянуть, он вынужден заново проверять). вполне возможно, что поэтому и беда. ибо новые компиляторы всё больше оптимизаций делают основываясь на идиотской идее про UB.

флаг я бы убирать не стал, потому что неизвестно, где ещё компилятор может проявить подобную гениальность.

Ответить | Правка | Наверх | Cообщить модератору

161. "Не работает jit на arm :("  +/
Сообщение от Анончик (?), 17-Янв-17, 15:58 
>[оверквотинг удален]
> p.p.s.: я сильно подозреваю, что это очередной случай, когда компилятор тупо считает:
> «программ с UB нет и быть не может». там выше цикл,
> который снимает у attr атрибут внутренней очистки, и в принципе, он
> без охраны. поэтому компилятор вправе считать, что после цикла data.attr никогда
> не NULL, даже если цикл в принципе выполнился ноль раз (а
> после вызова функции, в которую компилятор не может заглянуть, он вынужден
> заново проверять). вполне возможно, что поэтому и беда. ибо новые компиляторы
> всё больше оптимизаций делают основываясь на идиотской идее про UB.
> флаг я бы убирать не стал, потому что неизвестно, где ещё компилятор
> может проявить подобную гениальность.

Хм, а 4-й gcc такой фигни не творит? А то у меня пока нет возможности проверить...

Ответить | Правка | Наверх | Cообщить модератору

162. "Не работает jit на arm :("  +/
Сообщение от arisu (ok), 17-Янв-17, 16:09 
> Хм, а 4-й gcc такой фигни не творит? А то у меня
> пока нет возможности проверить...

я тоже не знаю, увы: собирать четвёртый gcc мне, откровенно говоря, лениво. но поскольку опера собиралась именно четвёртым (насколько я помню), в цветочке флага нет, а она не падала — скорее всего, не творил.

Ответить | Правка | Наверх | Cообщить модератору

181. "Не работает jit на arm :("  +/
Сообщение от Аноним (-), 19-Янв-17, 10:58 
>>> ещё у него есть проблемы со встроенным аллокатором, которые могут проявиться при
>>> сборке без дебага.
>> это баг gcc5+, который косячит, выкидывая нужное. решается стратегическим `
>> if (data.attrs) printf(" \x08"); else printf(" \x08");`, например.
>> а код для арм там кривой. ну и фиг с ним.
> Что-то я туплю, но где именно оно там падает? Вруг можно без
> хака с флагом пофиксить?

Падает по довольно простой причине: он убирает проверку на 0 перед delete. Оптимизация такая. А оперовая реализация delete не позволяет 0.
А в jit падает внутри jit блока. причём не в самом начале. Похоже на кривой трамплин где-то.
При этом на лоре есть информация что arm сбоока работает нормально.

Ответить | Правка | К родителю #159 | Наверх | Cообщить модератору

182. "Не работает jit на arm :("  +/
Сообщение от arisu (ok), 19-Янв-17, 11:11 
> Падает по довольно простой причине: он убирает проверку на 0 перед delete.
> Оптимизация такая. А оперовая реализация delete не позволяет 0.

позволяет, конечно же. убирается *сгенерированая* проверка в заинлайненом коде. по причине того, что авторы стандартов — безмозглые кучи соломы.

Ответить | Правка | Наверх | Cообщить модератору

192. "Не работает jit на arm :("  +/
Сообщение от Анончик (?), 19-Янв-17, 20:42 
>[оверквотинг удален]
>>> это баг gcc5+, который косячит, выкидывая нужное. решается стратегическим `
>>> if (data.attrs) printf(" \x08"); else printf(" \x08");`, например.
>>> а код для арм там кривой. ну и фиг с ним.
>> Что-то я туплю, но где именно оно там падает? Вруг можно без
>> хака с флагом пофиксить?
> Падает по довольно простой причине: он убирает проверку на 0 перед delete.
> Оптимизация такая. А оперовая реализация delete не позволяет 0.
> А в jit падает внутри jit блока. причём не в самом начале.
> Похоже на кривой трамплин где-то.
> При этом на лоре есть информация что arm сбоока работает нормально.

На лоре и хабре есть патчи на сборку армы, там тупо выкидывается код проверки возможностей проца.

Ответить | Правка | К родителю #181 | Наверх | Cообщить модератору

237. "Не работает jit на arm :("  +/
Сообщение от arisu (ok), 24-Янв-17, 06:31 
> На лоре и хабре есть патчи на сборку армы, там тупо выкидывается
> код проверки возможностей проца.

это, конечно, гениальное решение. iSage его привинтил чтобы хоть как‐то собрать, а хипстота решила, что Это Оно — и растащила по патчам. именно поэтому хипстоту надо изолировать от разработки, и поэтому же я не выкладываю промежуточных рабочих патчей.

я к тому, что проверка фич X86 на арме, конечно, не нужна. а вот немного других проверок не помешали бы.

Ответить | Правка | Наверх | Cообщить модератору

321. "Не работает jit на arm :("  +/
Сообщение от Аноним (-), 07-Фев-17, 19:06 
> На лоре и хабре есть патчи на сборку армы, там тупо выкидывается
> код проверки возможностей проца.

оно не работает. То есть я сам эту проверку и вручную вырезал и этим патчем, всё равно получаю краш. Не знаю, как оно работает у iSage, может он js отрубил?
Кстати, собранный отдельно jsshell не крашится.
Ещё что касается крашей: иногда js блоки проходят успешно, но после возвращения занулена часть регистров и крашится из-за нулевого указателя где-нибудь

Ответить | Правка | К родителю #192 | Наверх | Cообщить модератору

323. "Не работает jit на arm :("  +/
Сообщение от arisu (ok), 07-Фев-17, 21:10 
> Кстати, собранный отдельно jsshell не крашится.

потому что без аргумента -np он jit не использует.

Ответить | Правка | Наверх | Cообщить модератору

328. "Не работает jit на arm :("  +/
Сообщение от anonymous (??), 07-Фев-17, 23:09 
>> Кстати, собранный отдельно jsshell не крашится.
> потому что без аргумента -np он jit не использует.

Я с -np проверял, тоже работает

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру