>>> А разве кто-то утверждал, что это тоже на Rust?
>> А кто утверждал-то, что оно полностью на Rust?
> В #110 анон утверждает, требуя от меня аналогичный код на плюсах для
> опровержения его гипотезы. :) Э-э, это конечно же, очень-очень интересно … но причем тут именно эта вот ветка?
> Там не инлайн, если уж заниматься буквоедством, а вполне файлы *.s
Если заниматься буквоедством, то в GRUB точно то же кино с файлами. При этом MS VC++ инлайном ни в армщину, ни в 64 бита не умеет, да и вообще по стандарту:
> The asm declaration is conditionally-supported; its meaning is implementation-defined.
.
> Вот пример вполне практического "zero-runtime" на С++ https://github.com/icestudent/ontl/tree/master/ntl/rtl
> К бутлоадерам отношения не имеет.
> Асм там может потребоваться* - обратите, пожалуйста, на этот момент внимание -
> потому что тамошний компилятор для поддержки исключений генерирует определённые структуры,
> для работы с которыми интринсиков недостаточно.
А, это такое замысловатое "да, но пока еще нет, но почти что да, только пока нет"? :)
Кстати, если уж буквоедствовать, то интринсики (которые вроде как и в ржавчине не один год имеются) у нас в каком стандарте-то прописаны?
> Теперь возвращаемся к исходной посылке "рантайм LLVM, причем, например, паники там реализованы
> с использованием механизма исключений C++".
> Так вот мне, что бы считать "реализовать можно" без "наверное таки", желательно
> увидеть подобную реализацию
https://os.phil-opp.com/freestanding-rust-binary/
https://github.com/phil-opp/blog_os/blob/post-01/src/main.rs
Бинарник в пару KB (на самом деле, заполнен нулями чуть менее чем полностью), без зависимостей, нормально собирается и исправно запускается, демонстрируя JMP@here в gdb.
cargo rustc -- -Clink-arg=-nostartfiles
Тот же cargo rustc -- -Clink-arg=-nostartfiles --emit asm
дает выхлоп:
.text
.file "blog_os.6pwfxw6d-cgu.0"
.section .text._start,"ax",@progbits
.globl _start
.p2align 4, 0x90
.type _start,@function
_start:
pushq %rbp
movq %rsp, %rbp
.p2align 4, 0x90
.LBB0_1:
jmp .LBB0_1
.Lfunc_end0:
.size _start, .Lfunc_end0-_start .section .text.rust_begin_unwind,"ax",@progbits
.hidden rust_begin_unwind
.globl rust_begin_unwind
.p2align 4, 0x90
.type rust_begin_unwind,@function
rust_begin_unwind:
pushq %rbp
movq %rsp, %rbp
.p2align 4, 0x90
.LBB1_1:
jmp .LBB1_1
.Lfunc_end1:
.size rust_begin_unwind, .Lfunc_end1-rust_begin_unwind
.section ".note.GNU-stack","",@progbits
очень смахивет на q.e.d.