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