Hi In /arch/x86/boot/main.c (http://lxr.free-electrons.com/source/arch/x86/boot/main.c) , In the function init_heap, asm("leal %P1(%%esp),%0" 122 <http://lxr.free-electrons.com/source/arch/x86/boot/source/arch/x86/boot/main...> : "=r" (stack_end) : "i" (-STACK_SIZE <http://lxr.free-electrons.com/source/arch/x86/boot/ident?i=STACK_SIZE>)); What does the ‘%P1’ mean in the inline assembly above ? Thanks !
This ‘P’ is used to make gcc happy and work. Without ‘P’, this inline would be interpreted as: leal $-512(%esp), %eax With ‘P’, this inline is the thing we really want: leal -512(%esp), %eax Eventually, my gcc 4.9.2 does not compile with ‘P’ is missing. I am not sure if this is still the case for newer gcc (5/6). But you get the point. -daveti
On Mar 4, 2016, at 7:36 AM, 张云 <zyunone@163.com> wrote:
Hi
In /arch/x86/boot/main.c (http://lxr.free-electrons.com/source/arch/x86/boot/main.c <http://lxr.free-electrons.com/source/arch/x86/boot/main.c>) ,
In the function init_heap, asm("leal %P1(%%esp),%0" 122 <http://lxr.free-electrons.com/source/arch/x86/boot/source/arch/x86/boot/main...> : "=r" (stack_end) : "i" (-STACK_SIZE <http://lxr.free-electrons.com/source/arch/x86/boot/ident?i=STACK_SIZE>)); What does the ‘%P1’ mean in the inline assembly above ?
Thanks ! _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Mar 4, 2016, at 11:59 PM, Dave Tian <dave.jing.tian@gmail.com> wrote:
This ‘P’ is used to make gcc happy and work. Without ‘P’, this inline would be interpreted as: leal $-512(%esp), %eax With ‘P’, this inline is the thing we really want: leal -512(%esp), %eax
Eventually, my gcc 4.9.2 does not compile with ‘P’ is missing. I am not sure if this is still the case for newer gcc (5/6). But you get the point.
-daveti
Thank you for your detailed answer ! By the way, If someone have the problems alike, I suggest them to write some inline assembly and check the compiler’s assembly output.
On Mar 4, 2016, at 7:36 AM, 张云 <zyunone@163.com <mailto:zyunone@163.com>> wrote:
Hi
In /arch/x86/boot/main.c (http://lxr.free-electrons.com/source/arch/x86/boot/main.c <http://lxr.free-electrons.com/source/arch/x86/boot/main.c>) ,
In the function init_heap, asm("leal %P1(%%esp),%0" 122 <http://lxr.free-electrons.com/source/arch/x86/boot/source/arch/x86/boot/main...> : "=r" (stack_end) : "i" (-STACK_SIZE <http://lxr.free-electrons.com/source/arch/x86/boot/ident?i=STACK_SIZE>)); What does the ‘%P1’ mean in the inline assembly above ?
Thanks ! _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org <mailto:Kernelnewbies@kernelnewbies.org> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Sat, Mar 05, 2016 at 11:37:21AM +0800, 张云 wrote:
On Mar 4, 2016, at 11:59 PM, Dave Tian <dave.jing.tian@gmail.com> wrote:
This ‘P’ is used to make gcc happy and work. Without ‘P’, this inline would be interpreted as: leal $-512(%esp), %eax With ‘P’, this inline is the thing we really want: leal -512(%esp), %eax
Eventually, my gcc 4.9.2 does not compile with ‘P’ is missing. I am not sure if this is still the case for newer gcc (5/6). But you get the point.
-daveti
Thank you for your detailed answer !
By the way, If someone have the problems alike, I suggest them to write some inline assembly and check the compiler’s assembly output.
Didn't get different outputs here, do you have updates? -- Adam Lee http://adam8157.info
Maybe your compiler version is different from us. Mine is 4.9.2(debian)as same as daveti's. 发自 网易邮箱大师 在2016年03月07日 10:51,Adam Lee 写道: On Sat, Mar 05, 2016 at 11:37:21AM +0800, 张云 wrote:
On Mar 4, 2016, at 11:59 PM, Dave Tian <dave.jing.tian@gmail.com> wrote:
This ‘P’ is used to make gcc happy and work. Without ‘P’, this inline would be interpreted as: leal $-512(%esp), %eax With ‘P’, this inline is the thing we really want: leal -512(%esp), %eax
Eventually, my gcc 4.9.2 does not compile with ‘P’ is missing. I am not sure if this is still the case for newer gcc (5/6). But you get the point.
-daveti
Thank you for your detailed answer !
By the way, If someone have the problems alike, I suggest them to write some inline assembly and check the compiler’s assembly output.
Didn't get different outputs here, do you have updates? -- Adam Lee http://adam8157.info _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
participants (3)
-
Adam Lee -
Dave Tian -
张云