Неожиданно столкнулся с тем, что ассемблер под mingw чутка отличается от gcc’шного (хотя при этом у нас уже много чисто асмовых модулей, например sha2, на которых граблей не было, нужно было только экспортные имена поменять).
У нас есть код:
.section .rodata
.global <symbolname>
.type <symbolname>, @object
.align 4
<symbolname>:
.incbin "./files/<symbolname>.ext"
.byte 0
<symbolname>_end:
.global <symbolname>_size
.type <symbolname>_size, @object
.align 4
<symbolname>_size:
.int <symbolname>_end -<symbolname>
После чего мы генерим такой файл:
#ifndef <SYMBOLNAME>
#define <SYMBOLNAME>
extern const char <symbolname>[];
extern const u32 <symbolname>_size;
#endif /* <SYMBOLNAME> */
Как выяснилось, gcc это кушает хорошо, в вот mingw жрать не хочет:
<symbolname>_gen.s: Сообщения ассемблера:
<symbolname>_gen.s:3: Предупреждение: Псевдооперация .type используется вне .def/.endef: игнорируется.
<symbolname>_gen.s:3: Ошибка: мусор в конце строки, первый нераспознанный символ «m»
<symbolname>_gen.s:10: Предупреждение: Псевдооперация .type используется вне .def/.endef: игнорируется.
<symbolname>_gen.s:10: Ошибка: мусор в конце строки, первый нераспознанный символ «m»
Помогите, пожалуйста портировать эту засаду под mingw/win32.
Суть в автоматическом встраивании внешних файлов в бинарь. Например у нас есть JSON-файл со схемой валидации. Вместо того чтобы таскать его с собой, открывать на чтение и проч. просто используем условный myjson[].