← All posts tagged x86

Об исключенных командах или за что «списали» инструкцию INTO?
Любопытно было почитать материал от разработчика компилятора, способного выжимать из процессора максимум. Ещё @Tajunu писал про ущербность LLVM по сравнению с TenDRA, но так, достаточно поверхностно, а тут — от того, кто реально в теме.

Ну и интересно было узнать, что это не чисто случайно под Аду подходит, а под PL/1 делалось, а Ада попутно получилась, как тоже нормальный язык программирования.

Надо было по работе скомпилировать Wt, а он на C++. Причём, если говорят «беда не приходит одна», то это именно тот случай. Если C++, то ещё и boost, а если boost, то ещё и boost.spirit. Короче, на всю голову больные. Нет бы на C с классиками пописывать и не напрягать тех, кому это потом компилировать. Нет бы взять обычный внешний генератор парсеров. Настрадался я от этого boost.spirit. То там string table overflow at offset 10000004 в section .debug_frame случится, то
function_operator_10.hpp: In instantiation of 'const typename boost::phoenix::detail::expression::function_eval<F, A0, A1, A2, A3, A4>::type boost::phoenix::function<F>::operator()(const A0&…
Ну это манипуляциями с ключиками ещё как-то преодолел. Дальше проблемы, компоновщику тупо памяти не хватает. Вот тут посоветовали взять сборку отсюда. Не подошло:
c:/TDM/TDM-GCC-64-2017-01-07/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/TDM/TDM-GCC-64-2017-01-07/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/liblto_plugin-0.dll: error in plugin cleanup (ignored)
c:/TDM/TDM-GCC-64-2017-01-07/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/TDM/TDM-GCC-64-2017-01-07/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/liblto_plugin-0.dll: error loading plugin
И библиотеку указанную тоже пробовал заменять. Никак. Откатился на оригинальный ld.exe

Впрочем, оказалось, что снять у него ограничения по памяти не так сложно. Открыл HIEW, по смещению 0x96 пропатчил 0f 03 на 2f 03, что соответствует включению флага IMAGE_LARGE_ADDRESS_AWARE, и этим компоновщиком наконец смог собрать. Научить программы использовать больше памяти не так уж сложно, оказывается.

Оказывается, инженеры AMD64 подложили большую свинью быстрым песочницам и эмуляторам в юзерспейсе, запретив сегментацию даже в x86 программах. В нормальной x86 OS можно запрограммировать LDT как больше нравится, загрузить селекторы в сегментные регистры и, таким образом, получить эмулируемое окружение, например, Xbox или Linux, и даже долбаный fork(), от которого всё никак не откажутся в пользу pthread_create() и posix_spawn(), вполне реализуем без глюков (как в Cygwin), так как внутри эмулируемого окружения расположение нулевого смещения можно выбрать так, чтобы невыгружаемые страницы не занимали место, на котором в форкаемом процессе было что–то другое. В эмуляторе Xbox LDT используется, так как форматы fs:[...] на Windows и Xbox отличаются. А ещё есть программы, которые для противодействия отладке работают на изменённых селекторах. И всё это шмяк — и не работает. В принципе нельзя сделать, чтоб работало как раньше. Только fs и gs можно программировать.

Единственное решение в юзерспейсе — патчить код на лету, как это делает vx86. А ещё вчера узнал, что для 64битной Windows нет coLinux.

x86

xcore86.com

Если раньше всякие Cyrix, IBM и прочие х86 CPU отмирали, оставив только Intel и AMD, то сейчас на рынок выходит сначала VIA, а теперь ещё и Xcore86.

Xcore86 provides a crossover Device on Chip™ that integrates a complete PC on a low-cost single CHIP that competes with RISC chips in price and energy efficiency.
Ну и правильно. Ну их, эти мипсели, армы и прочие левые архитектуры