From: blaisorblade@yahoo.it
To: akpm@osdl.org
Cc: jdike@addtoit.com, linux-kernel@vger.kernel.org,
user-mode-linux-devel@lists.sourceforge.net,
blaisorblade@yahoo.it, ak@suse.de
Subject: [uml-devel] [patch 1/1] x86_64: make string func definition work as intended
Date: Sun, 01 May 2005 21:08:51 +0200 [thread overview]
Message-ID: <20050501190851.5FD5B45EBB@zion> (raw)
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);
_
-------------------------------------------------------
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
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
WARNING: multiple messages have this Message-ID (diff)
From: blaisorblade@yahoo.it
To: akpm@osdl.org
Cc: jdike@addtoit.com, linux-kernel@vger.kernel.org,
user-mode-linux-devel@lists.sourceforge.net,
blaisorblade@yahoo.it, ak@suse.de
Subject: [patch 1/1] x86_64: make string func definition work as intended
Date: Sun, 01 May 2005 21:08:51 +0200 [thread overview]
Message-ID: <20050501190851.5FD5B45EBB@zion> (raw)
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);
_
next reply other threads:[~2005-05-01 10:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-01 19:08 blaisorblade [this message]
2005-05-01 19:08 ` [patch 1/1] x86_64: make string func definition work as intended blaisorblade
2005-05-02 16:41 ` [uml-devel] " Andi Kleen
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 ` [uml-devel] Re: [patch 1/1] x86_64: make string func definition work as intended Andrew Morton
2005-05-03 7:21 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050501190851.5FD5B45EBB@zion \
--to=blaisorblade@yahoo.it \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=jdike@addtoit.com \
--cc=linux-kernel@vger.kernel.org \
--cc=user-mode-linux-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.