x86_64: make string func definition work as intended
Subsystems (3)
PATCH 1/1 x86_64: make string func definition work as intended
From: Paolo 'Blaisorblade' Giarrusso <[email protected]>
CC: Andi Kleen <[email protected]>
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.
---
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
lib/string.c renamed from lib/string.c~x86_64-string-func +4 -0
@@ -65,6 +65,7 @@ EXPORT_SYMBOL(strnicmp);* @dest: Where to copy the string to * @src: Where to copy the string from */ +#undef strcpychar *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 strcatchar *strcat (char * dest,const char * src) {char *tmp = dest;
@@ -209,6 +211,7 @@ EXPORT_SYMBOL(strlcat);* @cs: One string * @ct: Another string */ +#undef strcmpint strcmp (const char * cs,const char * ct) { registersigned char __res;
@@ -514,6 +517,7 @@ EXPORT_SYMBOL(memmove);* @ct: Another area of memory * @count: The size of the area. */ +#undef memcmpint memcmp (const void * cs,const void * ct,size_t count) {const unsigned char *su1, *su2;
arch/x86_64/kernel/x8664_ksyms.c renamed from arch/x86_64/kernel/x8664_ksyms.c~x86_64-string-func +0 -13
@@ -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 memcmpextern 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 */
arch/um/sys-x86_64/ksyms.c renamed from arch/um/sys-x86_64/ksyms.c~x86_64-string-func +0 -3
@@ -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);
_
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
Quoted 1 line
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
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
A message that is not in the archive (sent off-list or not yet received): [email protected]
Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended)
Quoted 4 lines · Adrian Bunk
Quoted 1 line · On Sun, May 01, 2005 at 09:08:51PM +0200, [email protected] 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.
Signature · 4 lines
Paolo Giarrusso, aka Blaisorblade Skype user "PaoloGiarrusso" Linux registered user n. 292729 http://www.user-mode-linux.org/~blaisorblade
Re: Setting the hardware clock together with the system one(was: Re: [patch 1/1] x86_64: make string func definition work as intended)
Quoted 8 lines · Blaisorblade
Quoted 4 lines · Adrian Bunk
Quoted 1 line · On Sun, May 01, 2005 at 09:08:51PM +0200, [email protected] 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:
Quoted 7 lines
# 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.
Quoted 1 line
Regards.
cu
Adrian
Signature · 4 lines
"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 SeedQuoted 12 lines · [email protected] wrote:
In
include/asm-x86_64/string.hthere are such comments:/* Use C out of line version for memcmp */ #define memcmp
__builtin_memcmp
intmemcmp(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 inlib/string.c. What happens is that after preprocessing, inlib/string.iyou may find the definition of "__builtin_strcmp".
Quoted 6 lines
Actually, by accident, in the object you will find the definition of strcmp and such (maybe a trick intended to redirect calls to
__builtin_memcmpto 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_SYMBOLdoes 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?
arch/i386/kernel/i386_ksyms.c renamed from arch/i386/kernel/i386_ksyms.c~x86_64-make-string-func-definition-work-as-intended-fix +0 -4
@@ -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);
_
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel