История изменений
Исправление
kirk_johnson,
(текущая версия)
:
Хорошая статья, только вы её не поняли. Там говорится, что если бы переписать va* и стандарт языка и решить проблему подсчёта уже считаного через введение специальной структуры, то можно заюзать тот же принцип передачи вначале через регистры и для функций с переменным количеством аргументов.
Нет, там говорится, что в LLVM этого не было в 2010 году, а в clang было:
A while back, I was poking around LLVM bugs, and discovered, to my surprise, that LLVM doesn’t support the va_arg intrinsic, used by functions to accept multiple arguments, at all on amd64. It turns out that clang and llvm-gcc, the compilers that backend to LLVM, have their own implementations in the frontend, so this isn’t as big a deal as it might sound, but it was still a surprise to me.
Чувак решил написать патч для LLVM:
Figuring that this might just be something no one got around to, and couldn’t actually be that hard, I pulled out my copy of the amd64 ABI specification, figuring that maybe I could throw together a patch and fix this issue.
Maybe half an hour of reading later, I stopped in terror and gave up, repenting of my foolish ways to go work on something else. va_arg on amd64 is a hairy, hairy beast, and probably not something I was going to hack together in an evening. And so instead I decided to blog about it.
Ты либо очень жырно меня троллируешь, либо не умеешь в английский.
А! Вы, наверное, не в курсе, что это не баг вовсе, а хорошее решение для уменьшения накладных расходов при вызове сисколов. Доступ к пользовательскому стеку из ядра — весьма накладная вещь. Страница может уже быть даже в свопе и со всем от сюда вытекающим. Толи дело — регистры.
UB — не баг, а оптимизация. Чертяка, жги ещё!
Исправление
kirk_johnson,
:
Хорошая статья, только вы её не поняли. Там говорится, что если бы переписать va* и стандарт языка и решить проблему подсчёта уже считаного через введение специальной структуры, то можно заюзать тот же принцип передачи вначале через регистры и для функций с переменным количеством аргументов.
Нет, там говорится, что в LLVM этого не было в 2010 году, а в clang было:
A while back, I was poking around LLVM bugs, and discovered, to my surprise, that LLVM doesn’t support the va_arg intrinsic, used by functions to accept multiple arguments, at all on amd64. It turns out that clang and llvm-gcc, the compilers that backend to LLVM, have their own implementations in the frontend, so this isn’t as big a deal as it might sound, but it was still a surprise to me.
Чувак решил написать патч для LLVM:
Figuring that this might just be something no one got around to, and couldn’t actually be that hard, I pulled out my copy of the amd64 ABI specification, figuring that maybe I could throw together a patch and fix this issue.
Maybe half an hour of reading later, I stopped in terror and gave up, repenting of my foolish ways to go work on something else. va_arg on amd64 is a hairy, hairy beast, and probably not something I was going to hack together in an evening. And so instead I decided to blog about it.
Ты либо очень жырно меня троллируешь, либо не умеешь в английский.
А! Вы, наверное, не в курсе, что это не баг вовсе, а хорошее решение для уменьшения накладных расходов при вызове сисколов. Доступ к пользовательскому стеку из ядра — весьма накладная вещь. Страница может уже быть даже в свопе и со всем от сюда вытекающим. Толи дело — регистры.
UB — не баг, а оптимизация. Чертяка, жги ещё!
Исходная версия
kirk_johnson,
:
Хорошая статья, только вы её не поняли. Там говорится, что если бы переписать va* и стандарт языка и решить проблему подсчёта уже считаного через введение специальной структуры, то можно заюзать тот же принцип передачи вначале через регистры и для функций с переменным количеством аргументов.
Нет, там говорится, что в LLVM этого не было в 2010 году, а в clang было.
A while back, I was poking around LLVM bugs, and discovered, to my surprise, that LLVM doesn’t support the va_arg intrinsic, used by functions to accept multiple arguments, at all on amd64. It turns out that clang and llvm-gcc, the compilers that backend to LLVM, have their own implementations in the frontend, so this isn’t as big a deal as it might sound, but it was still a surprise to me.
Чувак решил написать патч для LLVM:
Figuring that this might just be something no one got around to, and couldn’t actually be that hard, I pulled out my copy of the amd64 ABI specification, figuring that maybe I could throw together a patch and fix this issue.
Maybe half an hour of reading later, I stopped in terror and gave up, repenting of my foolish ways to go work on something else. va_arg on amd64 is a hairy, hairy beast, and probably not something I was going to hack together in an evening. And so instead I decided to blog about it.
Ты либо очень жырно меня троллируешь, либо не умеешь в английский.
А! Вы, наверное, не в курсе, что это не баг вовсе, а хорошее решение для уменьшения накладных расходов при вызове сисколов. Доступ к пользовательскому стеку из ядра — весьма накладная вещь. Страница может уже быть даже в свопе и со всем от сюда вытекающим. Толи дело — регистры.
UB — не баг, а оптимизация. Чертяка, жги ещё!