lkml.org 
[lkml]   [2009]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: Q: put_user_try & co (Was: [PATCH 1/5] Split wait_noreap_copyout())
Date
> 	#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


\
 
 \ /
  Last update: 2009-05-20 22:15    [W:1.400 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site