Садко и все. А почему GAS такой древний асм и так крепко держится? Не рассыпается в прах как другие? Это же бывший AS, один из первых ходовых ассемблеров. В нём должно всё устареть. Под Линуксы-БСД вроде же на Си пишут традиционно?
Потому что GAS - неотъемлемая часть GCC: прежде всего, ассемблерные вставки напрямую подставляются в ассемблерный файл, который генерирует GCC. А потом это всё, как раз, скармливается GAS. То есть, опять же, GCC скорее больше транслятор нежели компилятор: в одной из стадий компиляции он транслирует исходник на Си или Си++ в ассемблерный файл. Проверить это можете, передав опцию -S компилятору. На выходе получите вполне себе ассемблерный файл. Ну и, опять же, GCC используется для сборки ядра Linux. Разумеется, если там не будет продвинутого встроенного ассемблера, ядро особо не попишешь.
СадКо и все. Очень интересно, Садко! Я так понимаю что Си не транслируется в ассемблер, как раньше, а на прямую в машинный код? Ну я так читал что мол по началу Си транслировался в ассемблер, а потом сделали напрямую. Или на Линксе транслируется в асм, сначала, а потом в код? ГАС разве продвинутый? Говорят же что страшный динозавр, без малейшего облегчения жизни, кодеру? А где ГАС используют, кроме Линукс и БСД ядра? Ты знаешь, по ГАСу очень мало информации, в сети, а вещь явно интересная.
Это зависит от конкретного компилятора. Но зачастую в компиляторах стадия кодогенерации осуществляется после стадии перевода в псевдокод. Это особенно удобно, когда производитель предоставляет не конкретный компилятор, а набор (коллекцию) компиляторов для разных языков. Например, clang сначала генерирует код для LLVM, и только после этого вы можете получить нативный код. GCC генерирует ассемблерный код, а затем скармливает его GAS. Да что GCC. Тот же Watcom в своё время генерировал псевдокод, и только на финальной стадии выдавал уже объектник. Множество синтаксически различных языков всегда проще подвести под какую-то общую базу, и только после этого заниматься кодогенерацией. Так гибче, так проще. А почему нет? - Поддерживает БОЛЬШИНСТВО различных архитектур: x86, x86_64, ARM, Alpha, PPC, MIPS, AVR и т.д. - Своевременно поддерживает все инструкции, доступные для каждой поддерживаемой архитектуры. Недостаток только в AT&T-синтаксисе (который, кстати, при желании можно сменить на интеловский), который большинство кодеров, пришедших с венды или из доса, не могут сходу переварить. GLIBC же, навскидку. Встроенный в GCC ассемблерный код напрямую передаётся GAS как он есть (после стадии обработки компилятором). Ничего подобного, информации достаточно. Вот мануал https://sourceware.org/binutils/docs/as/