История изменений
Исправление EXL, (текущая версия) :
я скачал какой-то старый ADS для винды, установил и взял typedef int *va_list[1] оттуда. va_start там был определён через интринсик __va_start, но заменить его было не сложно.
Спасибо что заморочились. Понять как сравнить интринсики __va_start
(ADS) и __builtin_va_start
(GCC) между собой и органично перенести эти различия в макросы у меня не хватило опыта. 👍
Почему при этом интринсик __gnuc_va_list получился несовместимым с ADS-ным typedef int *va_list[1] не понятно.
Компилятор ADS очень старый, кажется 2001-2002 годы. Чуть позже после ADS (ARM Developer Suite) вышел более новый RVCT (RealView Compilation Tools), который похоже что в последних итерациях был уже совместим с GCC в этом моменте с variadic, хотя в доках RVCT есть такое:
The compiler generates errors like «Identifier va_list is undefined» when building GNU-style code.
This is because of slightly differing methods of implementing variadic functions between RVCT and GCC. The solution is to use the compiler option –preinclude stdarg.h to include the definitions of these types before the start of the application code.
Но это к версии 3.0 заметка. На 4.0 уже походу нормально всё.
Исходная версия EXL, :
я скачал какой-то старый ADS для винды, установил и взял typedef int *va_list[1] оттуда. va_start там был определён через интринсик __va_start, но заменить его было не сложно.
Спасибо что заморочились. Понять как сравнить интринсики __va_start
(ADS) и __builtin_va_start
(GCC) между собой и органично перенести эти различия в макросы у меня не хватило опыта. 👍
Почему при этом интринсик __gnuc_va_list получился несовместимым с ADS-ным typedef int *va_list[1] не понятно.
Компилятор ADS очень старый, кажется 2001-2002 годы. Чуть позже после ADS (ARM Developer Suite) вышел более новый RVCT (RealView Compilation Tools), который похоже что в последних итерациях был уже совместим с GCC в этом моменте с variadic, хотя в доках RVCT есть такое:
The compiler generates errors like «Identifier va_list is undefined» when building GNU-style code.
This is because of slightly differing methods of implementing variadic functions between RVCT and GCC. The solution is to use the compiler option –preinclude stdarg.h to include the definitions of these types before the start of the application code.