public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 1/1] x86_64: make string func definition work as intended
@ 2005-05-01 19:08 blaisorblade
  2005-05-02 16:41 ` Andi Kleen
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: blaisorblade @ 2005-05-01 19:08 UTC (permalink / raw)
  To: akpm; +Cc: jdike, linux-kernel, user-mode-linux-devel, blaisorblade, ak


From: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
CC: Andi Kleen <ak@suse.de>

In include/asm-x86_64/string.h there are such comments:

/* Use C out of line version for memcmp */ 
#define memcmp __builtin_memcmp
int memcmp(const void * cs,const void * ct,size_t count);

This would mean that if the compiler does not decide to use __builtin_memcmp,
it emits a call to memcmp to be satisfied by the C out-of-line version in
lib/string.c. What happens is that after preprocessing, in lib/string.i you
may find the definition of "__builtin_strcmp".

Actually, by accident, in the object you will find the definition of
strcmp and such (maybe a trick intended to redirect calls to __builtin_memcmp
to the default memcmp when the definition is not expanded); however, this
particular case is not a documented feature as far as I can see.

Also, the EXPORT_SYMBOL does not work, so it's duplicated in the arch.

I simply added some #undef to lib/string.c and removed the (now duplicated)
exports in x86-64 and UML/x86_64 subarchs (the second ones are introduced by
another patch I just posted for -mm).

I agree this can be a bit kludgy, so if you want add another solution.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
---

 linux-2.6.12-paolo/arch/um/sys-x86_64/ksyms.c       |    3 ---
 linux-2.6.12-paolo/arch/x86_64/kernel/x8664_ksyms.c |   13 -------------
 linux-2.6.12-paolo/lib/string.c                     |    4 ++++
 3 files changed, 4 insertions(+), 16 deletions(-)

diff -puN include/asm-x86_64/string.h~x86_64-string-func include/asm-x86_64/string.h
diff -puN lib/string.c~x86_64-string-func lib/string.c
--- linux-2.6.12/lib/string.c~x86_64-string-func	2005-05-01 20:45:29.000000000 +0200
+++ linux-2.6.12-paolo/lib/string.c	2005-05-01 20:45:29.000000000 +0200
@@ -65,6 +65,7 @@ EXPORT_SYMBOL(strnicmp);
  * @dest: Where to copy the string to
  * @src: Where to copy the string from
  */
+#undef strcpy
 char * strcpy(char * dest,const char *src)
 {
 	char *tmp = dest;
@@ -132,6 +133,7 @@ EXPORT_SYMBOL(strlcpy);
  * @dest: The string to be appended to
  * @src: The string to append to it
  */
+#undef strcat
 char * strcat(char * dest, const char * src)
 {
 	char *tmp = dest;
@@ -209,6 +211,7 @@ EXPORT_SYMBOL(strlcat);
  * @cs: One string
  * @ct: Another string
  */
+#undef strcmp
 int strcmp(const char * cs,const char * ct)
 {
 	register signed char __res;
@@ -514,6 +517,7 @@ EXPORT_SYMBOL(memmove);
  * @ct: Another area of memory
  * @count: The size of the area.
  */
+#undef memcmp
 int memcmp(const void * cs,const void * ct,size_t count)
 {
 	const unsigned char *su1, *su2;
diff -puN arch/x86_64/kernel/x8664_ksyms.c~x86_64-string-func arch/x86_64/kernel/x8664_ksyms.c
--- linux-2.6.12/arch/x86_64/kernel/x8664_ksyms.c~x86_64-string-func	2005-05-01 20:45:29.000000000 +0200
+++ linux-2.6.12-paolo/arch/x86_64/kernel/x8664_ksyms.c	2005-05-01 20:45:29.000000000 +0200
@@ -139,35 +139,23 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback);
 #undef memmove
 #undef memchr
 #undef strlen
-#undef strcpy
 #undef strncmp
 #undef strncpy
 #undef strchr	
-#undef strcmp 
-#undef strcpy 
-#undef strcat
-#undef memcmp
 
 extern void * memset(void *,int,__kernel_size_t);
 extern size_t strlen(const char *);
 extern void * memmove(void * dest,const void *src,size_t count);
-extern char * strcpy(char * dest,const char *src);
-extern int strcmp(const char * cs,const char * ct);
 extern void *memchr(const void *s, int c, size_t n);
 extern void * memcpy(void *,const void *,__kernel_size_t);
 extern void * __memcpy(void *,const void *,__kernel_size_t);
-extern char * strcat(char *, const char *);
-extern int memcmp(const void * cs,const void * ct,size_t count);
 
 EXPORT_SYMBOL(memset);
 EXPORT_SYMBOL(strlen);
 EXPORT_SYMBOL(memmove);
-EXPORT_SYMBOL(strcpy);
 EXPORT_SYMBOL(strncmp);
 EXPORT_SYMBOL(strncpy);
 EXPORT_SYMBOL(strchr);
-EXPORT_SYMBOL(strcmp);
-EXPORT_SYMBOL(strcat);
 EXPORT_SYMBOL(strncat);
 EXPORT_SYMBOL(memchr);
 EXPORT_SYMBOL(strrchr);
@@ -175,7 +163,6 @@ EXPORT_SYMBOL(strnlen);
 EXPORT_SYMBOL(memscan);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(__memcpy);
-EXPORT_SYMBOL(memcmp);
 
 #ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM
 /* prototypes are wrong, these are assembly with custom calling functions */
diff -puN arch/um/sys-x86_64/ksyms.c~x86_64-string-func arch/um/sys-x86_64/ksyms.c
--- linux-2.6.12/arch/um/sys-x86_64/ksyms.c~x86_64-string-func	2005-05-01 20:45:29.000000000 +0200
+++ linux-2.6.12-paolo/arch/um/sys-x86_64/ksyms.c	2005-05-01 20:45:29.000000000 +0200
@@ -14,9 +14,6 @@ EXPORT_SYMBOL(__up_wakeup);
 
 /*XXX: we need them because they would be exported by x86_64 */
 EXPORT_SYMBOL(__memcpy);
-EXPORT_SYMBOL(strcmp);
-EXPORT_SYMBOL(strcat);
-EXPORT_SYMBOL(strcpy);
 
 /* Networking helper routines. */
 /*EXPORT_SYMBOL(csum_partial_copy_from);
_

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch 1/1] x86_64: make string func definition work as intended
  2005-05-01 19:08 [patch 1/1] x86_64: make string func definition work as intended blaisorblade
@ 2005-05-02 16:41 ` Andi Kleen
       [not found] ` <20050501155327.GX3592@stusta.de>
  2005-05-03  7:21 ` [patch 1/1] x86_64: make string func definition work as intended Andrew Morton
  2 siblings, 0 replies; 5+ messages in thread
From: Andi Kleen @ 2005-05-02 16:41 UTC (permalink / raw)
  To: blaisorblade; +Cc: akpm, jdike, linux-kernel, user-mode-linux-devel, ak

> I agree this can be a bit kludgy, so if you want add another solution.

Patch is ok for me, but you have a good chance of having broken
other archs too due to the string.c changes. Probably needs some testing.

-Andi

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended)
       [not found] ` <20050501155327.GX3592@stusta.de>
@ 2005-05-02 19:36   ` Blaisorblade
  2005-05-02 22:00     ` Adrian Bunk
  0 siblings, 1 reply; 5+ messages in thread
From: Blaisorblade @ 2005-05-02 19:36 UTC (permalink / raw)
  To: Adrian Bunk, LKML

On Sunday 01 May 2005 17:53, Adrian Bunk wrote:
> On Sun, May 01, 2005 at 09:08:51PM +0200, blaisorblade@yahoo.it wrote:
> >...                    ^^^^^^^^^^^^^^^^
>
> Please correct the time settings on your computer.
I'm doing it by hand at every reboot. Just discovered this stupid Gentoo 
default setting:

# If you want to sync the system clock to the hardware clock during
# shutdown, then say "yes" here.

CLOCK_SYSTOHC="no"

In other words, the kernel does not auto-adjusts the hardware clock? Well, 
that's not nice... (maybe only the Gentoo setting).

Regards.
-- 
Paolo Giarrusso, aka Blaisorblade
Skype user "PaoloGiarrusso"
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended)
  2005-05-02 19:36   ` Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended) Blaisorblade
@ 2005-05-02 22:00     ` Adrian Bunk
  0 siblings, 0 replies; 5+ messages in thread
From: Adrian Bunk @ 2005-05-02 22:00 UTC (permalink / raw)
  To: Blaisorblade; +Cc: LKML

On Mon, May 02, 2005 at 09:36:41PM +0200, Blaisorblade wrote:
> On Sunday 01 May 2005 17:53, Adrian Bunk wrote:
> > On Sun, May 01, 2005 at 09:08:51PM +0200, blaisorblade@yahoo.it wrote:
> > >...                    ^^^^^^^^^^^^^^^^
> >
> > Please correct the time settings on your computer.
> I'm doing it by hand at every reboot. Just discovered this stupid Gentoo 
> default setting:
> 
> # If you want to sync the system clock to the hardware clock during
> # shutdown, then say "yes" here.
> 
> CLOCK_SYSTOHC="no"
> 
> In other words, the kernel does not auto-adjusts the hardware clock? Well, 
> that's not nice... (maybe only the Gentoo setting).

Besides such issues, it might also be an option to set the time using 
NTP information at boot time or (if network is started later) when 
starting your internet connection.

> Regards.

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] 5+ messages in thread

* Re: [patch 1/1] x86_64: make string func definition work as intended
  2005-05-01 19:08 [patch 1/1] x86_64: make string func definition work as intended blaisorblade
  2005-05-02 16:41 ` Andi Kleen
       [not found] ` <20050501155327.GX3592@stusta.de>
@ 2005-05-03  7:21 ` Andrew Morton
  2 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2005-05-03  7:21 UTC (permalink / raw)
  To: blaisorblade; +Cc: jdike, linux-kernel, user-mode-linux-devel, blaisorblade, ak

blaisorblade@yahoo.it wrote:
>
> In include/asm-x86_64/string.h there are such comments:
> 
>  /* Use C out of line version for memcmp */ 
>  #define memcmp __builtin_memcmp
>  int memcmp(const void * cs,const void * ct,size_t count);
> 
>  This would mean that if the compiler does not decide to use __builtin_memcmp,
>  it emits a call to memcmp to be satisfied by the C out-of-line version in
>  lib/string.c. What happens is that after preprocessing, in lib/string.i you
>  may find the definition of "__builtin_strcmp".
> 
>  Actually, by accident, in the object you will find the definition of
>  strcmp and such (maybe a trick intended to redirect calls to __builtin_memcmp
>  to the default memcmp when the definition is not expanded); however, this
>  particular case is not a documented feature as far as I can see.
> 
>  Also, the EXPORT_SYMBOL does not work, so it's duplicated in the arch.

This breaks the x86 build.  I guess the below is right.

You wanna check other architectures please?


diff -puN arch/i386/kernel/i386_ksyms.c~x86_64-make-string-func-definition-work-as-intended-fix arch/i386/kernel/i386_ksyms.c
--- 25/arch/i386/kernel/i386_ksyms.c~x86_64-make-string-func-definition-work-as-intended-fix	2005-05-03 00:16:36.000000000 -0700
+++ 25-akpm/arch/i386/kernel/i386_ksyms.c	2005-05-03 00:16:44.000000000 -0700
@@ -169,10 +169,6 @@ EXPORT_SYMBOL(rtc_lock);
 EXPORT_SYMBOL_GPL(set_nmi_callback);
 EXPORT_SYMBOL_GPL(unset_nmi_callback);
 
-#undef memcmp
-extern int memcmp(const void *,const void *,__kernel_size_t);
-EXPORT_SYMBOL(memcmp);
-
 EXPORT_SYMBOL(register_die_notifier);
 #ifdef CONFIG_HAVE_DEC_LOCK
 EXPORT_SYMBOL(_atomic_dec_and_lock);
_


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-05-03  7:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-01 19:08 [patch 1/1] x86_64: make string func definition work as intended blaisorblade
2005-05-02 16:41 ` Andi Kleen
     [not found] ` <20050501155327.GX3592@stusta.de>
2005-05-02 19:36   ` Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended) Blaisorblade
2005-05-02 22:00     ` Adrian Bunk
2005-05-03  7:21 ` [patch 1/1] x86_64: make string func definition work as intended Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox