lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 28 Apr 2009 17:31:43 -0700 From: "H. Peter Anvin" <hpa@...nel.org> To: Jeff Garzik <jeff@...zik.org> CC: LKML <linux-kernel@...r.kernel.org>, x86@...nel.org Subject: Re: [x86] Strange 64-bit put_user ? Jeff Garzik wrote: > In arch/x86/include/asm/uaccess.h, if !CONFIG_X86_32, we see > >> #define __put_user_x8(x, ptr, __ret_pu) \ >> ({ u64 __ret_pu; __put_user_x(8, x, ptr, __ret_pu); >> (int)__ret_pu; }) > > which was preceded by > >> #define __put_user_x(size, x, ptr, __ret_pu) \ >> asm volatile("call __put_user_" #size : "=a" (__ret_pu) \ >> :"0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx") > > > My question, from an admitted inline asm newbie: > > Why is 32-bit register 'ebx' being used for a 64-bit put_user? > > And a dumb-question follow-up, probably easy, for any x86 expert: why > are registers 'bl' and 'bx' not used for 8-bit and 16-bit put_user, > respectively? > The answer is simply that gcc doesn't make a distinction between bl, bx, ebx, and rbx -- it considers it a single regioster which can contain an 8-, 16-, 32- or 64-bit number. In particular, gcc can't use ah, bh, ch, and dh as independent registers at all. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists