Re: [PATCH] more signed char cleanups in scripts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06.22, Andrew Morton wrote:
> "J.A. Magallon" <[email protected]> wrote:
> >
> > This cleans the last signedness problems I have seen in scripts, at least
> >  what I can see with make oldconfig, make config, make menuconfig, 
> >  make gconfig and make.
> 
> Remind me: what's the point in these changes?
> 
> I see no particular problem using uchar in the kallsyms code - I often
> prefer it, because you can just look at the code and not have to worry
> about nasty sign-extension problems.
> 

Forget the part for kallsyms. After my change, it just coredumps.
The original gcc warnings are below. The problem is using str---
on data that are not strictly strings, but arrays of bytes...
Each symbol struct has a field. 'sym', that stores a 'type'
in sym[0] and a name from sym[1] to the end. A strange hacky mix.

At the end there is one another patch, this time at least kallsyms
works. Dump my previous try and get this. If you don't like the casts,
some strcmp's could be changed to memcmp (a,"b", sizeof("b"));

werewolf:/usr/src/linux# rm -f scripts/kallsyms; make scripts/kallsyms
  HOSTCC  scripts/kallsyms
scripts/kallsyms.c: In function 'read_symbol':
scripts/kallsyms.c:163: warning: pointer targets in assignment differ in signedness
scripts/kallsyms.c:164: warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness
scripts/kallsyms.c: In function 'symbol_valid':
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:210: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:211: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:212: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:217: warning: pointer targets in passing argument 1 of 'strstr' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness
scripts/kallsyms.c:221: warning: pointer targets in passing argument 1 of '__builtin_strcmp' differ in signedness

--- linux-2.6.12-jam1/scripts/mod/sumversion.c.orig	2005-06-21 23:44:30.000000000 +0200
+++ linux-2.6.12-jam1/scripts/mod/sumversion.c	2005-06-21 23:47:09.000000000 +0200
@@ -252,9 +252,9 @@
 }
 
 /* FIXME: Handle .s files differently (eg. # starts comments) --RR */
-static int parse_file(const signed char *fname, struct md4_ctx *md)
+static int parse_file(const char *fname, struct md4_ctx *md)
 {
-	signed char *file;
+	char *file;
 	unsigned long i, len;
 
 	file = grab_file(fname, &len);
@@ -332,7 +332,7 @@
 	   Sum all files in the same dir or subdirs.
 	*/
 	while ((line = get_next_line(&pos, file, flen)) != NULL) {
-		signed char* p = line;
+		char* p = line;
 		if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) {
 			check_files = 1;
 			continue;
@@ -458,7 +458,7 @@
 	close(fd);
 }
 
-static int strip_rcs_crap(signed char *version)
+static int strip_rcs_crap(char *version)
 {
 	unsigned int len, full_len;
 
--- linux-2.6.12-jam1/scripts/lxdialog/inputbox.c.orig	2005-06-21 23:40:27.000000000 +0200
+++ linux-2.6.12-jam1/scripts/lxdialog/inputbox.c	2005-06-21 23:42:39.000000000 +0200
@@ -21,7 +21,7 @@
 
 #include "dialog.h"
 
-unsigned char dialog_input_result[MAX_LEN + 1];
+char dialog_input_result[MAX_LEN + 1];
 
 /*
  *  Print the termination buttons
@@ -48,7 +48,7 @@
 {
     int i, x, y, box_y, box_x, box_width;
     int input_x = 0, scroll = 0, key = 0, button = -1;
-    unsigned char *instr = dialog_input_result;
+    char *instr = dialog_input_result;
     WINDOW *dialog;
 
     /* center dialog box on screen */
--- linux-2.6.12-jam1/scripts/lxdialog/dialog.h.orig	2005-06-21 23:42:55.000000000 +0200
+++ linux-2.6.12-jam1/scripts/lxdialog/dialog.h	2005-06-21 23:43:19.000000000 +0200
@@ -163,7 +163,7 @@
 int dialog_checklist (const char *title, const char *prompt, int height,
 		int width, int list_height, int item_no,
 		const char * const * items, int flag);
-extern unsigned char dialog_input_result[];
+extern char dialog_input_result[];
 int dialog_inputbox (const char *title, const char *prompt, int height,
 		int width, const char *init);
 
--- linux-2.6.12-jam1/scripts/conmakehash.c.orig	2005-06-22 00:16:58.000000000 +0200
+++ linux-2.6.12-jam1/scripts/conmakehash.c	2005-06-22 00:17:21.000000000 +0200
@@ -33,7 +33,7 @@
 
 int getunicode(char **p0)
 {
-  unsigned char *p = *p0;
+  char *p = *p0;
 
   while (*p == ' ' || *p == '\t')
     p++;
--- linux-2.6.12-jam1/scripts/kallsyms.c.orig	2005-06-22 00:29:29.000000000 +0200
+++ linux-2.6.12-jam1/scripts/kallsyms.c	2005-06-22 00:47:56.000000000 +0200
@@ -160,8 +160,8 @@
 	/* include the type field in the symbol name, so that it gets
 	 * compressed together */
 	s->len = strlen(str) + 1;
-	s->sym = (char *) malloc(s->len + 1);
-	strcpy(s->sym + 1, str);
+	s->sym = malloc(s->len + 1);
+	memcpy(s->sym + 1, str, s->len);
 	s->sym[0] = s->type;
 
 	return 0;
@@ -207,18 +207,18 @@
 		 * move then they may get dropped in pass 2, which breaks the
 		 * kallsyms rules.
 		 */
-		if ((s->addr == _etext && strcmp(s->sym + offset, "_etext")) ||
-		    (s->addr == _einittext && strcmp(s->sym + offset, "_einittext")) ||
-		    (s->addr == _eextratext && strcmp(s->sym + offset, "_eextratext")))
+		if ((s->addr == _etext && strcmp((char*)s->sym + offset, "_etext")) ||
+		    (s->addr == _einittext && strcmp((char*)s->sym + offset, "_einittext")) ||
+		    (s->addr == _eextratext && strcmp((char*)s->sym + offset, "_eextratext")))
 			return 0;
 	}
 
 	/* Exclude symbols which vary between passes. */
-	if (strstr(s->sym + offset, "_compiled."))
+	if (strstr((char*)s->sym + offset, "_compiled."))
 		return 0;
 
 	for (i = 0; special_symbols[i]; i++)
-		if( strcmp(s->sym + offset, special_symbols[i]) == 0 )
+		if( strcmp((char*)s->sym + offset, special_symbols[i]) == 0 )
 			return 0;
 
 	return 1;

--
J.A. Magallon <jamagallon()able!es>     \               Software is like sex:
werewolf!able!es                         \         It's better when it's free
Mandriva Linux release 2006.0 (Cooker) for i586
Linux 2.6.12-jam1 (gcc 4.0.1 (4.0.1-0.2mdk for Mandriva Linux release 2006.0))


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux