Messages in this thread | | | From | Roland McGrath <> | Subject | Re: Q: put_user_try & co (Was: [PATCH 1/5] Split wait_noreap_copyout()) | Date | Wed, 20 May 2009 13:11:27 -0700 (PDT) |
| |
> #define __put_user_asm_ex(...) \ > asm volatile( \ > "1: mov ..." \ > _ASM_EXTABLE(1b, &__efault_label) \ > : : ...)
You mean &&__efault_label here (it's a funny syntax, but that's how it is). &&label is a GCC extension that I'm not sure the kernel has used before.
I think it can be touchy to have an asm jump into compiled code that way. e.g., perhaps the compiler produced:
mov reg, 40(sp) mov $123, reg #APP ... inside of your asm ... #NO_APP mov 40(sp), reg
or some such thing. If you jump away from inside the asm, you won't ever do "mov 40(sp), reg". But the compiler might think that reg has its original value at the __efault_label: code location.
Perhaps more important than any particular compiler-confusion scenario we can come up with is simply that this would be an obscure corner of code generation in the compiler that the kernel has not evoked before. There might be bugs or oddities in various compilers of various vintages, that we don't know about because they never came up before.
Thanks, Roland
| |