Создано: 12 сентября 2015 07:20 · Поправил: 12 сентября 2015 07:23 Apokrif New! Цитата · Личное сообщение · #1
Народ, подскажите куда копать. Подбираю ключи компилятора, чтобы сгенерить сигнатуры для LUA. Нашел простую функцию в декомпилируемой либе и пытаюсь получить такую же при компиляции исходников.
gfind_nodef.c
Code:
static int gfind_nodef (lua_State *L) {
return luaL_error(L, LUA_QL("string.gfind")" was renamed to "
LUA_QL("string.gmatch"));
}
gcc-4.4.3 Похоже, что оптимизация полностью отключена (-O0) и есть стек фрэйм (адресация параметров идет через R11) lib.so
Все ключи тут. -fomit-frame-pointer Don't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions.
Проверил omit-frame-pointer для -O0 -O0 -Q --help=optimizers -fomit-frame-pointer [disabled]
Или я неправильно понимаю omit-frame-pointer или что-то еще упускаю... Протрахался день и ночь, куда еще копать?
Создано: 12 сентября 2015 19:16 · Поправил: 12 сентября 2015 20:37 Apokrif New! Цитата · Личное сообщение · #3
reversecode пишет: это у тебя что то с gcc потому что бай дефолт это Извините, я не понял при чём тут "бай дефолт"? В вашем примере все параметры передаются через регистры, а не через стек. У меня в обоих случаях параметры передаются через стек, но адресуются по-разному, через bp/r11 или sp. В остальном весь код с моих вариантах совпадает.
.text.luaL_checkstack:000007B8; End of function luaL_checkstack
Т.е. точно также все параметры передаются через стек, а не через регистры. У вас похоже включена оптимизация (-O) Скомпилите с -frecord-options-in-elf и посмотрите ваши ключи.
Или вы что-то другое имели ввиду?
Добавлено спустя 1 час 20 минут Уф, вроде разобрался! Android NDK генерит ключи ... -O2 -fomit-frame-pointer ... -O0 ... "-O2 -fomit-frame-pointer" - всегда автоматом, даже в debug mode "-O0" - моё В результате получается -fomit-frame-pointer [enabled] Поменял своё на -O0 -fno-omit-frame-pointer и получил -fomit-frame-pointer [disabled] И код совпал один в один!
Модераторы, вряд ли это тема кому интересно, может просто стереть её?