Мой экспериментальный код сбой при работе на голой x86_64-metal (ошибка страницы, когда IDT еще не установлен), но отлично работает на aarch64.
После тщательной проверки я выяснил, что причина этой ошибки страницы состоит из поврежденного адреса (намного выше 0x200_000, а только первая страница 2M еще отображается 1:1) функции "f", переданной в качестве аргумента для core:: fmt:: Функция ArgumentV1:: new():
#[doc(hidden)]
#[unstable(feature = "fmt_internals", reason = "internal to format_args!")]
pub fn new<'b, T>(x: &'b T,
f: fn(&T, &mut Formatter) -> Result) -> ArgumentV1<'b> {
unsafe {
ArgumentV1 {
formatter: mem::transmute(f),
value: mem::transmute(x)
}
}
}
AFAIK это значение жестко закодировано компилятором rustc, являющимся результатом компиляции времени обработки format_args! вариативные аргументы.
Возможно, у вас есть предложения о том, что случилось с этим делом. Спасибо.