LINUX.ORG.RU

История изменений

Исправление 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 — не баг, а оптимизация. Чертяка, жги ещё!