* [2.6 patch] kill IN_STRING_C
@ 2004-11-07 14:24 Adrian Bunk
2004-11-08 13:44 ` Andi Kleen
[not found] ` <200411081942.38954.pluto@pld-linux.org>
0 siblings, 2 replies; 30+ messages in thread
From: Adrian Bunk @ 2004-11-07 14:24 UTC (permalink / raw)
To: Andi Kleen; +Cc: linux-kernel
Hi Andi,
some months ago, you invented a IN_STRING_C with the following comment:
<-- snip -->
gcc 3.4 optimizes sprintf(foo,"%s",string) into strcpy.
Unfortunately that isn't seen by the inliner and linux/i386 has no
out-of-line strcpy so you end up with a linker error.
This patch adds out of line copies for most string functions to avoid
this.
...
<-- snip -->
I tried 2.6.10-rc1-mm3 with gcc 3.4.2 and the patch below and didn't
observe the problems you described.
Can you still reproduce this problem?
If not, I'll suggest to apply the patch below which saves a few kB in
lib/string.o .
Signed-off-by: Adrian Bunk <bunk@stusta.de>
--- linux-2.6.10-rc1-mm3-full/include/asm-i386/string.h.old 2004-11-07 13:27:44.000000000 +0100
+++ linux-2.6.10-rc1-mm3-full/include/asm-i386/string.h 2004-11-07 13:28:47.000000000 +0100
@@ -25,7 +25,6 @@
/* AK: in fact I bet it would be better to move this stuff all out of line.
*/
-#if !defined(IN_STRING_C)
#define __HAVE_ARCH_STRCPY
static inline char * strcpy(char * dest,const char *src)
@@ -180,8 +179,6 @@
return __res;
}
-#endif
-
#define __HAVE_ARCH_STRLEN
static inline size_t strlen(const char * s)
{
--- linux-2.6.10-rc1-mm3-full/lib/string.c.old 2004-11-07 13:29:00.000000000 +0100
+++ linux-2.6.10-rc1-mm3-full/lib/string.c 2004-11-07 13:29:05.000000000 +0100
@@ -19,8 +19,6 @@
* - Kissed strtok() goodbye
*/
-#define IN_STRING_C 1
-
#include <linux/types.h>
#include <linux/string.h>
#include <linux/ctype.h>
^ permalink raw reply [flat|nested] 30+ messages in thread* Re: [2.6 patch] kill IN_STRING_C 2004-11-07 14:24 [2.6 patch] kill IN_STRING_C Adrian Bunk @ 2004-11-08 13:44 ` Andi Kleen 2004-11-08 15:34 ` Adrian Bunk [not found] ` <200411081942.38954.pluto@pld-linux.org> 1 sibling, 1 reply; 30+ messages in thread From: Andi Kleen @ 2004-11-08 13:44 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel > Can you still reproduce this problem? > If not, I'll suggest to apply the patch below which saves a few kB in > lib/string.o . I would prefer to keep it because there is no guarantee in gcc that it always inlines all string functions unless you pass -minline-all-stringops. And with that the code would be bloated much more than the few out of lined fallback string functions. Even if it works for you with your configuration it's just by luck. -Andi ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 13:44 ` Andi Kleen @ 2004-11-08 15:34 ` Adrian Bunk 2004-11-08 16:19 ` Andi Kleen 2004-11-09 13:58 ` Arnd Bergmann 0 siblings, 2 replies; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 15:34 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel On Mon, Nov 08, 2004 at 02:44:49PM +0100, Andi Kleen wrote: > > Can you still reproduce this problem? > > If not, I'll suggest to apply the patch below which saves a few kB in > > lib/string.o . > > I would prefer to keep it because there is no guarantee in gcc > that it always inlines all string functions unless you pass > -minline-all-stringops. And with that the code would > be bloated much more than the few out of lined fallback > string functions. If I understand your changelog entry correctly, this wasn't the problem (the asm string functions are "static inline"). Rethinking it, I don't even understand the sprintf example in your changelog entry - shouldn't an inclusion of kernel.h always get it right? > Even if it works for you with your configuration it's just by luck. The two configurations I tried are one configuration with _everything_ except modules enablesd, and the other was _everything_ modular. That's why I'd like to have an example where it fails to understand the problem. > -Andi cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 15:34 ` Adrian Bunk @ 2004-11-08 16:19 ` Andi Kleen 2004-11-08 16:31 ` Adrian Bunk 2004-11-08 18:22 ` linux-os 2004-11-09 13:58 ` Arnd Bergmann 1 sibling, 2 replies; 30+ messages in thread From: Andi Kleen @ 2004-11-08 16:19 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel > Rethinking it, I don't even understand the sprintf example in your > changelog entry - shouldn't an inclusion of kernel.h always get it > right? Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. -Andi ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 16:19 ` Andi Kleen @ 2004-11-08 16:31 ` Adrian Bunk 2004-11-08 17:51 ` Andi Kleen 2004-11-08 18:04 ` [2.6 patch] kill IN_STRING_C Paweł Sikora 2004-11-08 18:22 ` linux-os 1 sibling, 2 replies; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 16:31 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > Rethinking it, I don't even understand the sprintf example in your > > changelog entry - shouldn't an inclusion of kernel.h always get it > > right? > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. Which gcc is "Newer"? My gcc 3.4.2 didn't show this problem. > -Andi cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 16:31 ` Adrian Bunk @ 2004-11-08 17:51 ` Andi Kleen 2004-11-08 18:34 ` Adrian Bunk 2004-11-08 18:04 ` [2.6 patch] kill IN_STRING_C Paweł Sikora 1 sibling, 1 reply; 30+ messages in thread From: Andi Kleen @ 2004-11-08 17:51 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel On Mon, Nov 08, 2004 at 05:31:01PM +0100, Adrian Bunk wrote: > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > Rethinking it, I don't even understand the sprintf example in your > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > right? > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. > > Which gcc is "Newer"? I saw it with 3.3-hammer, which had additional optimizations in this area at some point. Note that 3.3-hammer is widely used. I don't know if 3.4 does it in the same way. -Andi ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 17:51 ` Andi Kleen @ 2004-11-08 18:34 ` Adrian Bunk 2004-11-08 19:01 ` Andi Kleen 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 18:34 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel On Mon, Nov 08, 2004 at 06:51:20PM +0100, Andi Kleen wrote: > On Mon, Nov 08, 2004 at 05:31:01PM +0100, Adrian Bunk wrote: > > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > > Rethinking it, I don't even understand the sprintf example in your > > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > > right? > > > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. > > > > Which gcc is "Newer"? > > I saw it with 3.3-hammer, which had additional optimizations in this > area at some point. Note that 3.3-hammer is widely used. I don't > know if 3.4 does it in the same way. Is this a -hammer specific problem? If yes, does a -no-builtin-sprintf fix it? Or is the problem a missing #include <linux/kernel.h> at the top of include/linux/string.h? > -Andi cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 18:34 ` Adrian Bunk @ 2004-11-08 19:01 ` Andi Kleen 2004-11-08 23:38 ` Use -ffreestanding? Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: Andi Kleen @ 2004-11-08 19:01 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel On Mon, Nov 08, 2004 at 07:34:49PM +0100, Adrian Bunk wrote: > On Mon, Nov 08, 2004 at 06:51:20PM +0100, Andi Kleen wrote: > > On Mon, Nov 08, 2004 at 05:31:01PM +0100, Adrian Bunk wrote: > > > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > > > Rethinking it, I don't even understand the sprintf example in your > > > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > > > right? > > > > > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. > > > > > > Which gcc is "Newer"? > > > > I saw it with 3.3-hammer, which had additional optimizations in this > > area at some point. Note that 3.3-hammer is widely used. I don't > > know if 3.4 does it in the same way. > > Is this a -hammer specific problem? No, I just checked a 4.0 mainline gcc and it does it too. Note I saw it on x86-64, don't know if it occurs on i386 too. -Andi ^ permalink raw reply [flat|nested] 30+ messages in thread
* Use -ffreestanding? 2004-11-08 19:01 ` Andi Kleen @ 2004-11-08 23:38 ` Adrian Bunk 2004-11-09 5:01 ` Andi Kleen 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 23:38 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel On Mon, Nov 08, 2004 at 08:01:30PM +0100, Andi Kleen wrote: > On Mon, Nov 08, 2004 at 07:34:49PM +0100, Adrian Bunk wrote: > > On Mon, Nov 08, 2004 at 06:51:20PM +0100, Andi Kleen wrote: > > > On Mon, Nov 08, 2004 at 05:31:01PM +0100, Adrian Bunk wrote: > > > > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > > > > Rethinking it, I don't even understand the sprintf example in your > > > > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > > > > right? > > > > > > > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. > > > > > > > > Which gcc is "Newer"? > > > > > > I saw it with 3.3-hammer, which had additional optimizations in this > > > area at some point. Note that 3.3-hammer is widely used. I don't > > > know if 3.4 does it in the same way. > > > > Is this a -hammer specific problem? > > No, I just checked a 4.0 mainline gcc and it does it too. > > Note I saw it on x86-64, don't know if it occurs on i386 too. OK, I see the difference: After removing -fno-unit-at-a-time, I see this problem, too. Why doesn't the kernel use -ffreestanding which should prevent all such problems? > -Andi cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Use -ffreestanding? 2004-11-08 23:38 ` Use -ffreestanding? Adrian Bunk @ 2004-11-09 5:01 ` Andi Kleen 2004-11-10 1:45 ` [2.6 patch] " Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: Andi Kleen @ 2004-11-09 5:01 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel > Why doesn't the kernel use -ffreestanding which should prevent all such > problems? Because we want most of these optimizations. Also with -ffreestanding you would need to supply the out of line string functions anyways because gcc wouldn't inline them. -Andi ^ permalink raw reply [flat|nested] 30+ messages in thread
* [2.6 patch] Use -ffreestanding? 2004-11-09 5:01 ` Andi Kleen @ 2004-11-10 1:45 ` Adrian Bunk 2004-11-10 1:51 ` Linus Torvalds 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-10 1:45 UTC (permalink / raw) To: Andi Kleen, Andrew Morton, Linus Torvalds; +Cc: linux-kernel On Tue, Nov 09, 2004 at 06:01:07AM +0100, Andi Kleen wrote: > > Why doesn't the kernel use -ffreestanding which should prevent all such > > problems? > > Because we want most of these optimizations. Also with -ffreestanding Do we really want the compiler to silently replace in-kernel functions with built-ins? You can still do an explicit #define strlen __builtin_strlen if you want to use a gcc built-in function. > you would need to supply the out of line string functions anyways > because gcc wouldn't inline them. At least with gcc 3.4.2 on i386 adding -ffreestanding and your (i386-specific) IN_STRING_C hack removed compiles fine. > -Andi I'm open for examples why this actually doesn't work, but after my (limited) testin I'd suggest the patch below for inclusion in the next -mm. Signed-off-by: Adrian Bunk <bunk@stusta.de> --- linux-2.6.10-rc1-mm4-full-ffreestanding/Makefile.old 2004-11-09 22:27:06.000000000 +0100 +++ linux-2.6.10-rc1-mm4-full-ffreestanding/Makefile 2004-11-09 22:27:47.000000000 +0100 @@ -349,7 +349,8 @@ CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE) CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs \ - -fno-strict-aliasing -fno-common + -fno-strict-aliasing -fno-common \ + -ffreestanding AFLAGS := -D__ASSEMBLY__ export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION LOCALVERSION KERNELRELEASE \ ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] Use -ffreestanding? 2004-11-10 1:45 ` [2.6 patch] " Adrian Bunk @ 2004-11-10 1:51 ` Linus Torvalds 2004-11-10 1:57 ` Adrian Bunk 2004-11-10 21:01 ` Bill Davidsen 0 siblings, 2 replies; 30+ messages in thread From: Linus Torvalds @ 2004-11-10 1:51 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, Andrew Morton, linux-kernel On Wed, 10 Nov 2004, Adrian Bunk wrote: > > I'm open for examples why this actually doesn't work, but after my > (limited) testin I'd suggest the patch below for inclusion in the next > -mm. When was -ffreestanding introduced? Iow, it might not work with all compiler versions.. Apart from that, I think it makes sense. Linus ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] Use -ffreestanding? 2004-11-10 1:51 ` Linus Torvalds @ 2004-11-10 1:57 ` Adrian Bunk 2004-11-10 21:01 ` Bill Davidsen 1 sibling, 0 replies; 30+ messages in thread From: Adrian Bunk @ 2004-11-10 1:57 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andi Kleen, Andrew Morton, linux-kernel On Tue, Nov 09, 2004 at 05:51:41PM -0800, Linus Torvalds wrote: > > On Wed, 10 Nov 2004, Adrian Bunk wrote: > > > > I'm open for examples why this actually doesn't work, but after my > > (limited) testin I'd suggest the patch below for inclusion in the next > > -mm. > > When was -ffreestanding introduced? Iow, it might not work with all > compiler versions.. Apart from that, I think it makes sense. It's supported in gcc 2.95 (which is the oldest compiler supported by kernel 2.6). > Linus cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] Use -ffreestanding? 2004-11-10 1:51 ` Linus Torvalds 2004-11-10 1:57 ` Adrian Bunk @ 2004-11-10 21:01 ` Bill Davidsen 1 sibling, 0 replies; 30+ messages in thread From: Bill Davidsen @ 2004-11-10 21:01 UTC (permalink / raw) To: linux-kernel, Linus Torvalds Cc: Adrian Bunk, Andi Kleen, Andrew Morton, linux-kernel Linus Torvalds wrote: > > On Wed, 10 Nov 2004, Adrian Bunk wrote: > >>I'm open for examples why this actually doesn't work, but after my >>(limited) testin I'd suggest the patch below for inclusion in the next >>-mm. > > > When was -ffreestanding introduced? Iow, it might not work with all > compiler versions.. Apart from that, I think it makes sense. From RH 7.3: gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-113) -- -bill davidsen (davidsen@tmr.com) "The secret to procrastination is to put things off until the last possible moment - but no longer" -me ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 16:31 ` Adrian Bunk 2004-11-08 17:51 ` Andi Kleen @ 2004-11-08 18:04 ` Paweł Sikora 2004-11-08 18:31 ` Adrian Bunk 1 sibling, 1 reply; 30+ messages in thread From: Paweł Sikora @ 2004-11-08 18:04 UTC (permalink / raw) To: linux-kernel; +Cc: Adrian Bunk On Monday 08 of November 2004 17:31, you wrote: > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > Rethinking it, I don't even understand the sprintf example in your > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > right? > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) > > transparently. > > Which gcc is "Newer"? > > My gcc 3.4.2 didn't show this problem. #include <stdio.h> #include <string.h> char buf[128]; void test(char *str) { sprintf(buf, "%s", str); } gcc -Wall sp.c -S -O2 -fomit-frame-pointer -mregparm=3 .file "sp.c" .text .p2align 4,,15 .globl test .type test, @function test: movl %eax, %edx movl $buf, %eax jmp strcpy .size test, .-test .comm buf,128,32 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.3 (PLD Linux)" -- /* Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property. */ #define say(x) lie(x) ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 18:04 ` [2.6 patch] kill IN_STRING_C Paweł Sikora @ 2004-11-08 18:31 ` Adrian Bunk 2004-11-08 19:12 ` linux-os 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 18:31 UTC (permalink / raw) To: Pawe?? Sikora; +Cc: linux-kernel On Mon, Nov 08, 2004 at 07:04:13PM +0100, Pawe?? Sikora wrote: > On Monday 08 of November 2004 17:31, you wrote: > > On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: > > > > Rethinking it, I don't even understand the sprintf example in your > > > > changelog entry - shouldn't an inclusion of kernel.h always get it > > > > right? > > > > > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) > > > transparently. > > > > Which gcc is "Newer"? > > > > My gcc 3.4.2 didn't show this problem. > > #include <stdio.h> > #include <string.h> > char buf[128]; > void test(char *str) > { > sprintf(buf, "%s", str); > } >... > jmp strcpy >... This is the userspace example. The kernel example is: #include <linux/string.h> #include <linux/kernel.h> char buf[128]; void test(char *str) { sprintf(buf, "%s", str); } This results with gcc-3.4 (GCC) 3.4.2 (Debian 3.4.2-3) in: .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%s" .text .p2align 4,,15 .globl test .type test, @function test: pushl %eax pushl $.LC0 pushl $buf call sprintf addl $12, %esp ret .size test, .-test .globl buf .bss .align 32 .type buf, @object .size buf, 128 buf: .zero 128 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.2 (Debian 3.4.2-3)" cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 18:31 ` Adrian Bunk @ 2004-11-08 19:12 ` linux-os 2004-11-08 21:27 ` Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: linux-os @ 2004-11-08 19:12 UTC (permalink / raw) To: Adrian Bunk; +Cc: Pawe?? Sikora, linux-kernel On Mon, 8 Nov 2004, Adrian Bunk wrote: > On Mon, Nov 08, 2004 at 07:04:13PM +0100, Pawe?? Sikora wrote: >> On Monday 08 of November 2004 17:31, you wrote: >>> On Mon, Nov 08, 2004 at 05:19:35PM +0100, Andi Kleen wrote: >>>>> Rethinking it, I don't even understand the sprintf example in your >>>>> changelog entry - shouldn't an inclusion of kernel.h always get it >>>>> right? >>>> >>>> Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) >>>> transparently. >>> >>> Which gcc is "Newer"? >>> >>> My gcc 3.4.2 didn't show this problem. >> >> #include <stdio.h> >> #include <string.h> >> char buf[128]; >> void test(char *str) >> { >> sprintf(buf, "%s", str); >> } >> ... >> jmp strcpy >> ... > > > This is the userspace example. > > The kernel example is: > > #include <linux/string.h> > #include <linux/kernel.h> > > char buf[128]; > void test(char *str) > { > sprintf(buf, "%s", str); > } > > > This results with gcc-3.4 (GCC) 3.4.2 (Debian 3.4.2-3) in: > > .file "test.c" > .section .rodata.str1.1,"aMS",@progbits,1 > .LC0: > .string "%s" > .text > .p2align 4,,15 > .globl test > .type test, @function > test: > pushl %eax > pushl $.LC0 > pushl $buf > call sprintf > addl $12, %esp > ret > .size test, .-test > .globl buf > .bss > .align 32 > .type buf, @object > .size buf, 128 > buf: > .zero 128 > .section .note.GNU-stack,"",@progbits > .ident "GCC: (GNU) 3.4.2 (Debian 3.4.2-3)" > > > > cu > Adrian > On this compiler 3.3.3, -O2 will cause it to use strcpy(). Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 19:12 ` linux-os @ 2004-11-08 21:27 ` Adrian Bunk 2004-11-08 22:15 ` linux-os 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 21:27 UTC (permalink / raw) To: linux-os; +Cc: Pawe?? Sikora, linux-kernel On Mon, Nov 08, 2004 at 02:12:18PM -0500, linux-os wrote: > > On this compiler 3.3.3, -O2 will cause it to use strcpy(). Not for me: .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%s" .text .p2align 4,,15 .globl test .type test, @function test: pushl %ebp movl %esp, %ebp subl $12, %esp movl %eax, 8(%esp) movl $.LC0, %eax movl %eax, 4(%esp) movl $buf, (%esp) call sprintf movl %ebp, %esp popl %ebp ret .size test, .-test .globl buf .bss .align 32 .type buf, @object .size buf, 128 buf: .zero 128 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-2)" Are you using exactly my example file? Are you using the complete gcc command line as shown by "make V=1"? Which gcc 3.3.3 are you using? > Cheers, > Dick Johnson cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 21:27 ` Adrian Bunk @ 2004-11-08 22:15 ` linux-os 2004-11-08 22:29 ` Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: linux-os @ 2004-11-08 22:15 UTC (permalink / raw) To: Adrian Bunk; +Cc: Pawe?? Sikora, Linux kernel On Mon, 8 Nov 2004, Adrian Bunk wrote: > On Mon, Nov 08, 2004 at 02:12:18PM -0500, linux-os wrote: >> >> On this compiler 3.3.3, -O2 will cause it to use strcpy(). > > Not for me: > > .file "test.c" > .section .rodata.str1.1,"aMS",@progbits,1 > .LC0: > .string "%s" > .text > .p2align 4,,15 > .globl test > .type test, @function > test: > pushl %ebp > movl %esp, %ebp > subl $12, %esp > movl %eax, 8(%esp) > movl $.LC0, %eax > movl %eax, 4(%esp) > movl $buf, (%esp) > call sprintf > movl %ebp, %esp > popl %ebp > ret > .size test, .-test > .globl buf > .bss > .align 32 > .type buf, @object > .size buf, 128 > buf: > .zero 128 > .section .note.GNU-stack,"",@progbits > .ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-2)" > > > > Are you using exactly my example file? > Are you using the complete gcc command line as shown by "make V=1"? > Which gcc 3.3.3 are you using? > No, I am using (no headers): ------------------- extern int sprintf(char *, const char *,...); extern int puts(const char *); static const char hello[]="Hello"; int xxx(void); int xxx(){ char buf[0x100]; sprintf(buf, "%s", hello); puts(buf); return 0; } -------------------- Compiled as: gcc -O2 -Wall -S -o xxx xxx.c I get: .file "xxx.c" .section .rodata .type hello, @object .size hello, 6 hello: .string "Hello" .text .p2align 2,,3 .globl xxx .type xxx, @function xxx: pushl %ebp movl %esp, %ebp pushl %ebx subl $268, %esp pushl $hello leal -264(%ebp), %ebx pushl %ebx call strcpy movl %ebx, (%esp) call puts xorl %eax, %eax movl -4(%ebp), %ebx leave ret .size xxx, .-xxx .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.3 20040412 (Red Hat Linux 3.3.3-7)" If I don't use -O2, I get the sprintf() call. If I use the constant string "Hello" instead of the allocated string, it just bypasses everything and calls puts() directly. If I use -fno-builtin, then it doesn't bypass sprintf(). However, there is no ISO C standard of "built-in" so I don't think any compiler should default to something that is undefined and decide to do whatever its current whims are. Certainly, a compiler that has some capabilities, not defined by a standard, should be able to use those capabilities, but it certainly shouldn't decide to do these things on its own. Reviewing `man gcc` I see where I should be able to find out what the built-in commands are: gcc -dumpspecs However, this man page is wrong because I don't get a listing of any built-in functions, only the linking and compiler defaults. The compiler is a tool. It should be just like other tools. Any killer options should be something that take a special effort to turn ON. It shouldn't default to firing the bullet out both ends of the barrel! Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 22:15 ` linux-os @ 2004-11-08 22:29 ` Adrian Bunk 2004-11-08 22:57 ` linux-os 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 22:29 UTC (permalink / raw) To: linux-os; +Cc: Pawe?? Sikora, Linux kernel On Mon, Nov 08, 2004 at 05:15:14PM -0500, linux-os wrote: > >... > >Are you using exactly my example file? > >Are you using the complete gcc command line as shown by "make V=1"? > >Which gcc 3.3.3 are you using? > > > > No, I am using (no headers): > ------------------- > extern int sprintf(char *, const char *,...); > extern int puts(const char *); > static const char hello[]="Hello"; > int xxx(void); > int xxx(){ > char buf[0x100]; > sprintf(buf, "%s", hello); > puts(buf); > return 0; > } > -------------------- > > Compiled as: > > gcc -O2 -Wall -S -o xxx xxx.c >... If you don't compile the code as it would be compiled inside the kernel, that's your fault... Please reply only if you can reproduce this with #include <linux/string.h>, #include <linux/kernel.h> _and_ a gcc command line as it would be in the kernel - everything else is useless. > Cheers, > Dick Johnson cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 22:29 ` Adrian Bunk @ 2004-11-08 22:57 ` linux-os 2004-11-08 23:08 ` Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: linux-os @ 2004-11-08 22:57 UTC (permalink / raw) To: Adrian Bunk; +Cc: Pawe?? Sikora, Linux kernel [-- Attachment #1: Type: TEXT/PLAIN, Size: 2211 bytes --] On Mon, 8 Nov 2004, Adrian Bunk wrote: > > If you don't compile the code as it would be compiled inside the kernel, > that's your fault... > > Please reply only if you can reproduce this with > #include <linux/string.h>, #include <linux/kernel.h> _and_ a gcc command > line as it would be in the kernel - everything else is useless. I attached a script that duplicates the gcc command line for the compile and also generates the 'C' code. Script started on Mon 08 Nov 2004 05:50:54 PM EST # sh -v xxx.sh #!/bin/bash cat >xxx.c <<EOF KERN=/usr/src/linux-`uname -r` uname -r touch xxx.o.d gcc -Wp,-MD,xxx.o.d -nostdinc -iwithprefix include -D__KERNEL__ -I${KERN}/include -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -fomit-frame-pointer -Wdeclaration-after-statement -pipe -msoft-float -mpreferred-stack-boundary=2 -march=pentium4 -I${KERN}/include/asm-i386/mach-generic -I${KERN}/include/asm-i386/mach-default -DKVER6 -DMAJOR_NR=178 -DTRUE=1 -DFALSE=0 -DMODULE -DKBUILD_BASENAME=xxx -DKBUILD_MODNAME=Junk -S -o xxx xxx.c cat xxx .file "xxx.c" .section .rodata .type hello, @object .size hello, 6 hello: .string "Hello" .text .globl xxx .type xxx, @function xxx: subl $268, %esp movl %ebx, 264(%esp) movl $hello, 4(%esp) leal 8(%esp), %ebx movl %ebx, (%esp) call strcpy movl %ebx, (%esp) call printk movl 264(%esp), %ebx xorl %eax, %eax addl $268, %esp ret .size xxx, .-xxx .type strcpy, @function strcpy: subl $8, %esp movl 12(%esp), %ecx movl %esi, (%esp) movl %edi, 4(%esp) movl 16(%esp), %esi movl %ecx, %edi #APP 1: lodsb stosb testb %al,%al jne 1b #NO_APP movl %ecx, %eax movl (%esp), %esi movl 4(%esp), %edi addl $8, %esp ret .size strcpy, .-strcpy .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.3 20040412 (Red Hat Linux 3.3.3-7)" # exit Script done on Mon 08 Nov 2004 05:51:03 PM EST It clearly invents strcpy, having never been referenced in the source. Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. [-- Attachment #2: Type: APPLICATION/x-sh, Size: 751 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 22:57 ` linux-os @ 2004-11-08 23:08 ` Adrian Bunk 2004-11-09 12:44 ` linux-os 0 siblings, 1 reply; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 23:08 UTC (permalink / raw) To: linux-os; +Cc: Pawe?? Sikora, Linux kernel On Mon, Nov 08, 2004 at 05:57:12PM -0500, linux-os wrote: >... > call strcpy >... > strcpy: > subl $8, %esp >... > It clearly invents strcpy, having never been referenced in the > source. The asm code you sent does _not_ call a global strcpy function. It calls an asm procedure named "strcpy" it ships itself. BTW: You are the second person in this thread I have to explain this to... > Cheers, > Dick Johnson cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 23:08 ` Adrian Bunk @ 2004-11-09 12:44 ` linux-os 2004-11-09 13:43 ` linux-os 0 siblings, 1 reply; 30+ messages in thread From: linux-os @ 2004-11-09 12:44 UTC (permalink / raw) To: Adrian Bunk; +Cc: Pawe?? Sikora, Linux kernel On Tue, 9 Nov 2004, Adrian Bunk wrote: > On Mon, Nov 08, 2004 at 05:57:12PM -0500, linux-os wrote: >> ... >> call strcpy >> ... >> strcpy: >> subl $8, %esp >> ... >> It clearly invents strcpy, having never been referenced in the >> source. > > The asm code you sent does _not_ call a global strcpy function. > It calls an asm procedure named "strcpy" it ships itself. > > BTW: You are the second person in this thread I have to explain this to... > >> Cheers, >> Dick Johnson > > cu > Adrian Explain WHAT? There is NO strcpy in the code. No such procedure should have been called. Period. The generated code is defective. Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-09 12:44 ` linux-os @ 2004-11-09 13:43 ` linux-os 0 siblings, 0 replies; 30+ messages in thread From: linux-os @ 2004-11-09 13:43 UTC (permalink / raw) To: Adrian Bunk; +Cc: Pawe?? Sikora, Linux kernel On Tue, 9 Nov 2004, linux-os wrote: > On Tue, 9 Nov 2004, Adrian Bunk wrote: > >> On Mon, Nov 08, 2004 at 05:57:12PM -0500, linux-os wrote: >>> ... >>> call strcpy >>> ... >>> strcpy: >>> subl $8, %esp >>> ... >>> It clearly invents strcpy, having never been referenced in the >>> source. >> >> The asm code you sent does _not_ call a global strcpy function. >> It calls an asm procedure named "strcpy" it ships itself. >> >> BTW: You are the second person in this thread I have to explain this to... >> >>> Cheers, >>> Dick Johnson >> >> cu >> Adrian > > Explain WHAT? There is NO strcpy in the code. No such procedure > should have been called. Period. The generated code is defective. > Here is more information showing the defective code generation. Output of `nm` 00000000 r hello U printk 00000039 t strcpy 00000000 T xxx Clearly shows a strcpy symbol when strcpy() was never referenced in the 'C' code. Output of objdump xxx.o: file format elf32-i386 Disassembly of section .text: 00000000 <xxx>: 0: 81 ec 0c 01 00 00 sub $0x10c,%esp 6: 89 9c 24 08 01 00 00 mov %ebx,0x108(%esp) d: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 14: 00 15: 8d 5c 24 08 lea 0x8(%esp),%ebx 19: 89 1c 24 mov %ebx,(%esp) 1c: e8 18 00 00 00 call 39 <strcpy> 21: 89 1c 24 mov %ebx,(%esp) 24: e8 fc ff ff ff call 25 <xxx+0x25> 29: 8b 9c 24 08 01 00 00 mov 0x108(%esp),%ebx 30: 31 c0 xor %eax,%eax 32: 81 c4 0c 01 00 00 add $0x10c,%esp 38: c3 ret 00000039 <strcpy>: 39: 83 ec 08 sub $0x8,%esp 3c: 8b 4c 24 0c mov 0xc(%esp),%ecx 40: 89 34 24 mov %esi,(%esp) 43: 89 7c 24 04 mov %edi,0x4(%esp) 47: 8b 74 24 10 mov 0x10(%esp),%esi 4b: 89 cf mov %ecx,%edi 4d: ac lods %ds:(%esi),%al 4e: aa stos %al,%es:(%edi) 4f: 84 c0 test %al,%al 51: 75 fa jne 4d <strcpy+0x14> 53: 89 c8 mov %ecx,%eax 55: 8b 34 24 mov (%esp),%esi 58: 8b 7c 24 04 mov 0x4(%esp),%edi 5c: 83 c4 08 add $0x8,%esp 5f: c3 ret [SNIPPED...] Clearly shows a GLOBAL procedure called strcpy when no such procedure was ever referenced in the code. Now I will show that the strcpy() procedure is NOT local. It's global and can screw up anything: Another program.... char printk; // Just quiet the reference // ... just a label, never called. extern int puts(const char *); // No header funnies extern char *strcpy(char *, const char *); int main(){ char buf[0x100]; strcpy(buf, "WTF?"); // Going to call it! puts(buf); return 0; } Show code generation. $ gcc -S -o aaa zzz.c .file "zzz.c" .section .rodata .LC0: .string "WTF?" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $264, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp subl $8, %esp pushl $.LC0 leal -264(%ebp), %eax pushl %eax call strcpy # Clearly calls it. addl $16, %esp subl $12, %esp leal -264(%ebp), %eax pushl %eax call puts addl $16, %esp movl $0, %eax leave ret .size main, .-main .comm printk,1,1 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.3 20040412 (Red Hat Linux 3.3.3-7)" Now compile and link with the file containing ROGUE strcpy(). $ gcc -o zzz zzz.c xxx.o $ ./zzz WTF? Executes, calling a ROGUE function that MUST NOT exist. Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 16:19 ` Andi Kleen 2004-11-08 16:31 ` Adrian Bunk @ 2004-11-08 18:22 ` linux-os 2004-11-08 19:31 ` Ryan Cumming 1 sibling, 1 reply; 30+ messages in thread From: linux-os @ 2004-11-08 18:22 UTC (permalink / raw) To: Andi Kleen; +Cc: Adrian Bunk, Linux kernel On Mon, 8 Nov 2004, Andi Kleen wrote: >> Rethinking it, I don't even understand the sprintf example in your >> changelog entry - shouldn't an inclusion of kernel.h always get it >> right? > > Newer gcc rewrites sprintf(buf,"%s",str) to strcpy(buf,str) transparently. > > -Andi Hmmm, how does it get the correct return-value and type? I don't think that a compiler is allowed to change the function(s) called. If gcc is doing this now, there are many potential problems and it needs to be fixed. For instance, one can't qualify a 'C' runtime library and then have a compiler decide that it's not going to call the pre-qualified function. Cheers, Dick Johnson Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips). Notice : All mail here is now cached for review by John Ashcroft. 98.36% of all statistics are fiction. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 18:22 ` linux-os @ 2004-11-08 19:31 ` Ryan Cumming 0 siblings, 0 replies; 30+ messages in thread From: Ryan Cumming @ 2004-11-08 19:31 UTC (permalink / raw) To: linux-kernel; +Cc: linux-os On Monday 08 November 2004 10:22, linux-os wrote: > Hmmm, how does it get the correct return-value and type? Presumably it does it only for sprintf() calls where the return value is ignored. > I don't > think that a compiler is allowed to change the function(s) called. GCC is making the assumption that the functions it's replacing comply with the C standard. I personally don't think that's too insane, especially since it can be turned off (see below). > If gcc is doing this now, there are many potential problems and > it needs to be fixed. For instance, one can't qualify a > 'C' runtime library and then have a compiler decide that it's > not going to call the pre-qualified function. -fno-builtin -Ryan ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 15:34 ` Adrian Bunk 2004-11-08 16:19 ` Andi Kleen @ 2004-11-09 13:58 ` Arnd Bergmann 2004-11-10 2:30 ` Adrian Bunk 1 sibling, 1 reply; 30+ messages in thread From: Arnd Bergmann @ 2004-11-09 13:58 UTC (permalink / raw) To: Adrian Bunk; +Cc: Andi Kleen, linux-kernel [-- Attachment #1: Type: text/plain, Size: 996 bytes --] > On Mon, Nov 08, 2004 at 02:44:49PM +0100, Andi Kleen wrote: > > > > Can you still reproduce this problem? > > > If not, I'll suggest to apply the patch below which saves a few kB in > > > lib/string.o . > > > > I would prefer to keep it because there is no guarantee in gcc > > that it always inlines all string functions unless you pass > > -minline-all-stringops. And with that the code would > > be bloated much more than the few out of lined fallback > > string functions. > > If I understand your changelog entry correctly, this wasn't the problem > (the asm string functions are "static inline"). Actually, shouldn't the string functions be "extern inline" then? That would mean we use the copy from lib/string.c instead of generating a new copy for each file in which gcc decides not to inline the function. It would also let you get rid of the IN_STRING_C hack that is needed to avoid the clash of the "static inline" and the "extern" version. Arnd <>< [-- Attachment #2: signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-09 13:58 ` Arnd Bergmann @ 2004-11-10 2:30 ` Adrian Bunk 0 siblings, 0 replies; 30+ messages in thread From: Adrian Bunk @ 2004-11-10 2:30 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Andi Kleen, linux-kernel On Tue, Nov 09, 2004 at 02:58:34PM +0100, Arnd Bergmann wrote: > > On Mon, Nov 08, 2004 at 02:44:49PM +0100, Andi Kleen wrote: > > > > > > Can you still reproduce this problem? > > > > If not, I'll suggest to apply the patch below which saves a few kB in > > > > lib/string.o . > > > > > > I would prefer to keep it because there is no guarantee in gcc > > > that it always inlines all string functions unless you pass > > > -minline-all-stringops. And with that the code would > > > be bloated much more than the few out of lined fallback > > > string functions. > > > > If I understand your changelog entry correctly, this wasn't the problem > > (the asm string functions are "static inline"). > > Actually, shouldn't the string functions be "extern inline" then? > That would mean we use the copy from lib/string.c instead of generating > a new copy for each file in which gcc decides not to inline the function. >... In the kernel, we #define inline to __attribute__((always_inline)) [1] leaving gcc no room for a decision to not inline it. > Arnd <>< cu Adrian [1] only for gcc >= 3.1, but I don't remember problems with older gcc versions -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
[parent not found: <200411081942.38954.pluto@pld-linux.org>]
[parent not found: <20041108185222.GE15077@stusta.de>]
* Re: [2.6 patch] kill IN_STRING_C [not found] ` <20041108185222.GE15077@stusta.de> @ 2004-11-08 19:11 ` Paweł Sikora 2004-11-08 21:25 ` Adrian Bunk 0 siblings, 1 reply; 30+ messages in thread From: Paweł Sikora @ 2004-11-08 19:11 UTC (permalink / raw) To: Adrian Bunk; +Cc: linux-kernel On Monday 08 of November 2004 19:52, you wrote: > On Mon, Nov 08, 2004 at 07:42:38PM +0100, Pawe?? Sikora wrote: > >... > > [~/rpm/BUILD] # gcc -Wall sp.c -S -O2 -fomit-frame-pointer -mregparm=3 > > -nostdinc -isystem /usr/src/linux/include > > > > sp.c: In function `test': > > sp.c:7: warning: implicit declaration of function `sprintf' > > > > [~/rpm/BUILD] # cat sp.s > > > > .file "sp.c" > > .text > > .p2align 4,,15 > > .globl test > > .type test, @function > > test: > > movl %eax, %edx > > movl $buf, %eax > > jmp strcpy > > .size test, .-test > > .comm buf,128,32 > > .section .note.GNU-stack,"",@progbits > > .ident "GCC: (GNU) 3.4.3 (PLD Linux)" > > > > > > What now? > > Do a "make V=1" and use the complete gcc call you see there. [~/rpm/BUILD/linux-2.6.10-rc1] # gcc -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 -Wdeclaration-after-statement -pipe -msoft-float -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=pentium3 -Iinclude/asm-i386/mach-default -S sp.c .file "sp.c" .text .p2align 4,,15 .globl test .type test, @function test: pushl %ebp movl %esp, %ebp subl $8, %esp movl $buf, (%esp) movl 8(%ebp), %eax movl %eax, 4(%esp) call strcpy leave ret .size test, .-test .p2align 4,,15 .type strcpy, @function strcpy: pushl %ebp movl %esp, %ebp subl $12, %esp movl %esi, -8(%ebp) movl 8(%ebp), %edx movl 12(%ebp), %esi movl %edi, -4(%ebp) movl %edx, %edi #APP 1: lodsb stosb testb %al,%al jne 1b #NO_APP movl -8(%ebp), %esi movl %edx, %eax movl -4(%ebp), %edi movl %ebp, %esp popl %ebp ret .size strcpy, .-strcpy .globl buf .bss .align 32 .type buf, @object .size buf, 128 buf: .zero 128 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.3 (PLD Linux)" -- /* Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property. */ #define say(x) lie(x) ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [2.6 patch] kill IN_STRING_C 2004-11-08 19:11 ` Paweł Sikora @ 2004-11-08 21:25 ` Adrian Bunk 0 siblings, 0 replies; 30+ messages in thread From: Adrian Bunk @ 2004-11-08 21:25 UTC (permalink / raw) To: Pawe?? Sikora; +Cc: linux-kernel On Mon, Nov 08, 2004 at 08:11:46PM +0100, Pawe?? Sikora wrote: > > gcc -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude -Wall > -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2 > -Wdeclaration-after-statement -pipe -msoft-float -mpreferred-stack-boundary=2 > -fno-unit-at-a-time -march=pentium3 -Iinclude/asm-i386/mach-default -S sp.c > >... > call strcpy >... > strcpy: > pushl %ebp >... That's no function call. :-) cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2004-11-10 21:20 UTC | newest]
Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-07 14:24 [2.6 patch] kill IN_STRING_C Adrian Bunk
2004-11-08 13:44 ` Andi Kleen
2004-11-08 15:34 ` Adrian Bunk
2004-11-08 16:19 ` Andi Kleen
2004-11-08 16:31 ` Adrian Bunk
2004-11-08 17:51 ` Andi Kleen
2004-11-08 18:34 ` Adrian Bunk
2004-11-08 19:01 ` Andi Kleen
2004-11-08 23:38 ` Use -ffreestanding? Adrian Bunk
2004-11-09 5:01 ` Andi Kleen
2004-11-10 1:45 ` [2.6 patch] " Adrian Bunk
2004-11-10 1:51 ` Linus Torvalds
2004-11-10 1:57 ` Adrian Bunk
2004-11-10 21:01 ` Bill Davidsen
2004-11-08 18:04 ` [2.6 patch] kill IN_STRING_C Paweł Sikora
2004-11-08 18:31 ` Adrian Bunk
2004-11-08 19:12 ` linux-os
2004-11-08 21:27 ` Adrian Bunk
2004-11-08 22:15 ` linux-os
2004-11-08 22:29 ` Adrian Bunk
2004-11-08 22:57 ` linux-os
2004-11-08 23:08 ` Adrian Bunk
2004-11-09 12:44 ` linux-os
2004-11-09 13:43 ` linux-os
2004-11-08 18:22 ` linux-os
2004-11-08 19:31 ` Ryan Cumming
2004-11-09 13:58 ` Arnd Bergmann
2004-11-10 2:30 ` Adrian Bunk
[not found] ` <200411081942.38954.pluto@pld-linux.org>
[not found] ` <20041108185222.GE15077@stusta.de>
2004-11-08 19:11 ` Paweł Sikora
2004-11-08 21:25 ` Adrian Bunk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).