Hi All,

I am trying to understand the implementation of copy_from_user() and
copy_to_user() implementation in linux. I know the basics of asm format. But
i don't know what is
.section .fixup
.previous
.align 4

Can u please point me to a detailed documentation of asm details involving
the above?

Thanks,
Seshikanth

 320 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L320>
* Tell gcc we read from memory instead of writing: this is because 321
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L321>
* we do not write to any memory gcc knows about, so there are no 322
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L322>
* aliasing issues. 323
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L323>
*/ 324 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L324>#define
__put_user_asm 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=__put_user_asm>(x
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=x>,
addr <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=addr>,
err <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=err>,
itype <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=itype>,
rtype <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=rtype>,
ltype <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=ltype>,
errret <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=errret>)
      \ 325 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L325>
       __asm__ 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=__asm__>
__volatile__ 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=__volatile__>(
                                          \ 326
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L326>
               "1:     mov"itype
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=itype>"
%"rtype 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=rtype>"1,%2\n"
                     \ 327
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L327>
               "2:\n"
\ 328 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L328>
               ".section .fixup,\"ax\"\n"
\ 329 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L329>
               "3:     movl %3,%0\n"
\ 330 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L330>
               "       jmp 2b\n"
\ 331 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L331>
               ".previous\n"
\ 332 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L332>
               ".section __ex_table,\"a\"\n"
\ 333 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L333>
               "       .align 4\n"
\ 334 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L334>
               "       .long 1b,3b\n"
\ 335 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L335>
               ".previous"
\ 336 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L336>
               : "=r"(err
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=err>)
                                          \ 337
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L337>
               : ltype
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=ltype>
(x <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=x>),
"m"(__m <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=__m>(addr
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=addr>)),
"i"(errret 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=errret>),
"0"(err <http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/+code=err>))
338 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L338>
339 
<http://lxr.linux.no/linux-bk+v2.6.11.5/include/asm-i386/include/asm-i386/uaccess.h#L339>


-- 
Regards,
Seshikanth

Reply via email to