Skip to contentSkip to conversation

Fix building kernel under Solaris

PATCH In review Deepak Saxena 4 participants 14 messages Mar 6, 2007 – Mar 10, 2007

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix building kernel under Solaris

Fix varous build breakages that occur when building on a Solaris system (SunOS 4.8 to be exact)

- No asm/types.h

- lpptest doesn't make sense on a Solaris host (this should really be cross-built..)

- Need to define __s32 and __s16

- Need to define Elf32_Section and Elf64_Section

- Solaris does not provide strsep

include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h linux-2.6.18_pro500/include/linux/input.h
@@ -16,8 +16,10 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif
 
 /*
  * The event structure itself
scripts/Makefile renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile +3 -1
diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile linux-2.6.18_pro500/scripts/Makefile
@@ -12,10 +12,12 @@
 hostprogs-$(CONFIG_VT)           += conmakehash
 hostprogs-$(CONFIG_PROM_CONSOLE) += conmakehash
 hostprogs-$(CONFIG_IKCONFIG)     += bin2c
+HOST_OS := $(shell uname)
+ifneq ($(HOST_OS),SunOS)
 ifdef CONFIG_LPPTEST
 hostprogs-y      += testlpp
 endif
-
+endif
 always		:= $(hostprogs-y)
 
 subdir-$(CONFIG_MODVERSIONS) += genksyms
scripts/mod/file2alias.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.c +5 -0
diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.c linux-2.6.18_pro500/scripts/mod/file2alias.c
@@ -29,6 +29,11 @@
 
 #include <ctype.h>
 
+#if defined(__sun__)
+typedef int32_t	__s32;
+typedef int16_t	__s16;
+#endif
+
 #if defined(__CYGWIN__)
 typedef __uint32_t	__u32;
 #else
scripts/mod/modpost.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h +5 -0
diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h linux-2.6.18_pro500/scripts/mod/modpost.h
@@ -15,6 +15,11 @@
 
 #include "elfconfig.h"
 
+#if defined(__sun__)
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 #if KERNEL_ELFCLASS == ELFCLASS32
 
 #define Elf_Ehdr    Elf32_Ehdr
scripts/mod/sumversion.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c +8 -0
diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c linux-2.6.18_pro500/scripts/mod/sumversion.c
@@ -1,6 +1,7 @@
 #if defined(__sun__)
 #include <netinet/in.h>
 #include <inttypes.h>
+#include <limits.h>
 #elif defined(__CYGWIN__)
 #include <asm/byteorder.h>	/* For ntohl/htonl */
 #include <limits.h>
@@ -421,9 +422,16 @@
 	*end = '\0';
 
 	md4_init(&md);
+/*
+ * Solaris does not strsep
+ */
+#ifndef __sun__
 	while ((fname = strsep(&sources, " ")) != NULL) {
 		if (!*fname)
 			continue;
+#else
+	for (fname = strtok(sources, " "); fname; fname = strtok(NULL, " ")) {
+#endif
 		if (!parse_source_files(fname, &md))
 			goto release;
 	}
Signature · 4 lines
Deepak Saxena - [email protected] - http://www.plexity.net

In the end, they will not say, "those were dark times,"  they will ask
"why were their poets silent?" - Bertolt Brecht
#1 lore raw

SIGRETRACT

I have -rt merged into my tree so this won't apply cleanly to mainline.

~Deepak

On Mar 06 2007, at 10:09, Deepak Saxena was caught saying:

Quoted 119 lines

Fix varous build breakages that occur when building on a Solaris system (SunOS 4.8 to be exact)

- No asm/types.h

- lpptest doesn't make sense on a Solaris host (this should really be cross-built..)

- Need to define __s32 and __s16

- Need to define Elf32_Section and Elf64_Section

- Solaris does not provide strsep

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h linux-2.6.18_pro500/include/linux/input.h

include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
@@ -16,8 +16,10 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif
 
 /*
  * The event structure itself

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile linux-2.6.18_pro500/scripts/Makefile

scripts/Makefile renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile +3 -1
@@ -12,10 +12,12 @@
 hostprogs-$(CONFIG_VT)           += conmakehash
 hostprogs-$(CONFIG_PROM_CONSOLE) += conmakehash
 hostprogs-$(CONFIG_IKCONFIG)     += bin2c
+HOST_OS := $(shell uname)
+ifneq ($(HOST_OS),SunOS)
 ifdef CONFIG_LPPTEST
 hostprogs-y      += testlpp
 endif
-
+endif
 always		:= $(hostprogs-y)
 
 subdir-$(CONFIG_MODVERSIONS) += genksyms

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.c linux-2.6.18_pro500/scripts/mod/file2alias.c

scripts/mod/file2alias.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.c +5 -0
@@ -29,6 +29,11 @@
 
 #include <ctype.h>
 
+#if defined(__sun__)
+typedef int32_t	__s32;
+typedef int16_t	__s16;
+#endif
+
 #if defined(__CYGWIN__)
 typedef __uint32_t	__u32;
 #else

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h linux-2.6.18_pro500/scripts/mod/modpost.h

scripts/mod/modpost.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h +5 -0
@@ -15,6 +15,11 @@
 
 #include "elfconfig.h"
 
+#if defined(__sun__)
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 #if KERNEL_ELFCLASS == ELFCLASS32
 
 #define Elf_Ehdr    Elf32_Ehdr

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c linux-2.6.18_pro500/scripts/mod/sumversion.c

scripts/mod/sumversion.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c +8 -0
@@ -1,6 +1,7 @@
 #if defined(__sun__)
 #include <netinet/in.h>
 #include <inttypes.h>
+#include <limits.h>
 #elif defined(__CYGWIN__)
 #include <asm/byteorder.h>	/* For ntohl/htonl */
 #include <limits.h>
@@ -421,9 +422,16 @@
 	*end = '\0';
 
 	md4_init(&md);
+/*
+ * Solaris does not strsep
+ */
+#ifndef __sun__
 	while ((fname = strsep(&sources, " ")) != NULL) {
 		if (!*fname)
 			continue;
+#else
+	for (fname = strtok(sources, " "); fname; fname = strtok(NULL, " ")) {
+#endif
 		if (!parse_source_files(fname, &md))
 			goto release;
 	}
Signature · 10 lines
-- 
Deepak Saxena - [email protected] - http://www.plexity.net

In the end, they will not say, "those were dark times,"  they will ask
"why were their poets silent?" - Bertolt Brecht
-
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/
Signature · 4 lines
Deepak Saxena - [email protected] - http://www.plexity.net

In the end, they will not say, "those were dark times,"  they will ask
"why were their poets silent?" - Bertolt Brecht
#2 lore raw
In reply to Deepak Saxena
Quoted 22 lines · Deepak Saxena

Fix varous build breakages that occur when building on a Solaris system (SunOS 4.8 to be exact)

- No asm/types.h

- lpptest doesn't make sense on a Solaris host (this should really be cross-built..)

- Need to define __s32 and __s16

- Need to define Elf32_Section and Elf64_Section

- Solaris does not provide strsep

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h linux-2.6.18_pro500/include/linux/input.h

include/linux/input.h line 22

Quoted 7 lines
include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
@@ -16,8 +16,10 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

Either we need it - or we do not need it - no?
So we can just kill the include.

Quoted 8 lines
include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +0 -0
 /*
  * The event structure itself

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile linux-2.6.18_pro500/scripts/Makefile

scripts/Makefile renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile +0 -0
@@ -12,10 +12,12 @@
 hostprogs-$(CONFIG_VT)           += conmakehash

scripts/Makefile line 21

Quoted 10 lines
scripts/Makefile renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/Makefile +3 -1
 hostprogs-$(CONFIG_PROM_CONSOLE) += conmakehash
 hostprogs-$(CONFIG_IKCONFIG)     += bin2c
+HOST_OS := $(shell uname)
+ifneq ($(HOST_OS),SunOS)
 ifdef CONFIG_LPPTEST
 hostprogs-y      += testlpp
 endif
-
+endif
 always		:= $(hostprogs-y)

testlpp is not in mainline - what is it?
[downloading -mm now]

Quoted 47 lines
scripts/mod/file2alias.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.c +5 -0
@@ -29,6 +29,11 @@
 
 #include <ctype.h>
 
+#if defined(__sun__)
+typedef int32_t	__s32;
+typedef int16_t	__s16;
+#endif
+
 #if defined(__CYGWIN__)
 typedef __uint32_t	__u32;
 #else

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h linux-2.6.18_pro500/scripts/mod/modpost.h

scripts/mod/modpost.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/modpost.h +5 -0
@@ -15,6 +15,11 @@
 
 #include "elfconfig.h"
 
+#if defined(__sun__)
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 #if KERNEL_ELFCLASS == ELFCLASS32
 
 #define Elf_Ehdr    Elf32_Ehdr

diff -uNr -X /home/src/dontdiff /home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c linux-2.6.18_pro500/scripts/mod/sumversion.c

scripts/mod/sumversion.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c +4 -0
@@ -1,6 +1,7 @@
 #if defined(__sun__)
 #include <netinet/in.h>
 #include <inttypes.h>
+#include <limits.h>
 #elif defined(__CYGWIN__)
 #include <asm/byteorder.h>	/* For ntohl/htonl */
 #include <limits.h>
@@ -421,9 +422,16 @@
 	*end = '\0';
 
 	md4_init(&md);
+/*
+ * Solaris does not strsep
+ */

scripts/mod/sumversion.c line 437

Quoted 10 lines
scripts/mod/sumversion.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c +4 -0
+#ifndef __sun__
 	while ((fname = strsep(&sources, " ")) != NULL) {
 		if (!*fname)
 			continue;
+#else
+	for (fname = strtok(sources, " "); fname; fname = strtok(NULL, " ")) {
+#endif
 		if (!parse_source_files(fname, &md))
 			goto release;
 	}

Why the ifdef - I assume it is always OK to use the latter version? Please send next diff cc: to me (at least the parts that touches scripts/

Sam

#3 lore raw
In reply to Deepak Saxena

include/linux/input.h line 22

Quoted 8 lines · Deepak Saxena
include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
@@ -16,8 +16,10 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

So if solaris doesn't need it, why do we need it on Linux?

scripts/mod/sumversion.c line 437

Quoted 13 lines
scripts/mod/sumversion.c renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.c +7 -0
+/*
+ * Solaris does not strsep
+ */
+#ifndef __sun__
 	while ((fname = strsep(&sources, " ")) != NULL) {
 		if (!*fname)
 			continue;
+#else
+	for (fname = strtok(sources, " "); fname; fname = strtok(NULL, " ")) {
+#endif
 		if (!parse_source_files(fname, &md))
 			goto release;
 	}

Please either provide a strsep for solaris, or use strtok unconditionally. ut this ifdef mess is not acceptable.

Quoted 1 line
#4 lore raw
Quoted 9 lines · Christoph Hellwig

include/linux/input.h line 22

Quoted 7 lines

#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>

include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

So if solaris doesn't need it, why do we need it on Linux?

For __s32 and __s16.

Jan

#5 lore raw
Quoted 12 lines · Jan Engelhardt
Quoted 9 lines · Christoph Hellwig

include/linux/input.h line 22

Quoted 7 lines

#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>

include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

So if solaris doesn't need it, why do we need it on Linux?

Quoted 1 line

For __s32 and __s16.

We shouldn't use those from asm/types.h on Linux either, but get them consitantly by defining them to the C99 or BSD types from the libc headers.

#6 lore raw
Quoted 13 lines · Christoph Hellwig
Quoted 12 lines · Jan Engelhardt
Quoted 9 lines · Christoph Hellwig

include/linux/input.h line 22

Quoted 7 lines

#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>

include/linux/input.h renamed from home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.h +2 -0
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

So if solaris doesn't need it, why do we need it on Linux?

Quoted 5 lines
Quoted 1 line

For __s32 and __s16.

We shouldn't use those from asm/types.h on Linux either, but get them consitantly by defining them to the C99 or BSD types from the libc headers.

It's a bit icky. file2alias.c includes "../../include/linux/input.h" and it is _input.h_ that requires __s16/__s32 and hence includes <asm/types.h>. If you ask me, it's file2alias.c that's broken.

Jan

#7 lore raw
Quoted 17 lines · Jan Engelhardt
Quoted 15 lines · Christoph Hellwig
Quoted 13 lines · Jan Engelhardt
Quoted 9 lines · Christoph Hellwig

Review

Quoted 7 lines

#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>

(quoted diff) +2 -0
+#ifndef __sun__
 #include <asm/types.h>
 #endif
+#endif

So if solaris doesn't need it, why do we need it on Linux?

For __s32 and __s16.

Quoted 7 lines
Quoted 3 lines

We shouldn't use those from asm/types.h on Linux either, but get them consitantly by defining them to the C99 or BSD types from the libc headers.

It's a bit icky. file2alias.c includes "../../include/linux/input.h" and it is _input.h_ that requires __s16/__s32 and hence includes <asm/types.h>. If you ask me, it's file2alias.c that's broken.

Took a closer look and agree on that.
I have queued up below patch to fix it.
I expect to see an updated patch on the other issues from Deepak.

Sam

include/linux/input.h +4 -0
index bde65c8..13d510c 100644
@@ -1010,6 +1010,10 @@ struct input_dev {
 #error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
 #endif
 
+#if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING
+#error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match"
+#endif
+
 #if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
 #error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
 #endif
include/linux/mod_devicetable.h +1 -0
index e0c393c..5e89204 100644
@@ -262,6 +262,7 @@ struct i2c_device_id {
 
 /* Input */
 #define INPUT_DEVICE_ID_EV_MAX		0x1f
+#define INPUT_DEVICE_ID_KEY_MIN_INTERESTING	0x71
 #define INPUT_DEVICE_ID_KEY_MAX		0x1ff
 #define INPUT_DEVICE_ID_REL_MAX		0x0f
 #define INPUT_DEVICE_ID_ABS_MAX		0x3f
scripts/mod/file2alias.c +11 -10
index f61c9cc..96319eb 100644
@@ -37,7 +37,6 @@ typedef unsigned char	__u8;
  * even potentially has different endianness and word sizes, since
  * we handle those differences explicitly below */
 #include "../../include/linux/mod_devicetable.h"
-#include "../../include/linux/input.h"
 
 #define ADD(str, sep, cond, field)                              \
 do {                                                            \
@@ -416,31 +415,33 @@ static int do_input_entry(const char *filename, struct input_device_id *id,
 
 	sprintf(alias + strlen(alias), "-e*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT)
-		do_input(alias, id->evbit, 0, EV_MAX);
+		do_input(alias, id->evbit, 0, INPUT_DEVICE_ID_EV_MAX);
 	sprintf(alias + strlen(alias), "k*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT)
-		do_input(alias, id->keybit, KEY_MIN_INTERESTING, KEY_MAX);
+		do_input(alias, id->keybit,
+			 INPUT_DEVICE_ID_KEY_MIN_INTERESTING,
+			 INPUT_DEVICE_ID_KEY_MAX);
 	sprintf(alias + strlen(alias), "r*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT)
-		do_input(alias, id->relbit, 0, REL_MAX);
+		do_input(alias, id->relbit, 0, INPUT_DEVICE_ID_REL_MAX);
 	sprintf(alias + strlen(alias), "a*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT)
-		do_input(alias, id->absbit, 0, ABS_MAX);
+		do_input(alias, id->absbit, 0, INPUT_DEVICE_ID_ABS_MAX);
 	sprintf(alias + strlen(alias), "m*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT)
-		do_input(alias, id->mscbit, 0, MSC_MAX);
+		do_input(alias, id->mscbit, 0, INPUT_DEVICE_ID_MSC_MAX);
 	sprintf(alias + strlen(alias), "l*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT)
-		do_input(alias, id->ledbit, 0, LED_MAX);
+		do_input(alias, id->ledbit, 0, INPUT_DEVICE_ID_LED_MAX);
 	sprintf(alias + strlen(alias), "s*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT)
-		do_input(alias, id->sndbit, 0, SND_MAX);
+		do_input(alias, id->sndbit, 0, INPUT_DEVICE_ID_SND_MAX);
 	sprintf(alias + strlen(alias), "f*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT)
-		do_input(alias, id->ffbit, 0, FF_MAX);
+		do_input(alias, id->ffbit, 0, INPUT_DEVICE_ID_FF_MAX);
 	sprintf(alias + strlen(alias), "w*");
 	if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT)
-		do_input(alias, id->swbit, 0, SW_MAX);
+		do_input(alias, id->swbit, 0, INPUT_DEVICE_ID_SW_MAX);
 	return 1;
 }
 
#8 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

Quoted 1 line · Sam Ravnborg

Subject: Re: [PATCH] Fix building kernel under Solaris

Since Solaris seems to be on the run, I did myself try compile it. However, unlike the original poster who said he did so on SunOS 4.8, I did it on 5.11_snv39, yielding a bigger changeset. I thought I just share the diff that piled up so far. It needs a lot of hacks on the Solaris side - prioritizing GNU names, then, second, gnu ld has a glitch, then, gcc has a missing file... it's fun fun fun!

Well, I will iterate the key problem with the missing file:

* include/linux/kernel.h (and many others) include <stdarg.h> BUT - since we are using -nostdinc, /usr/include/stdarg.h is not considered. And gcc's stdarg.h (which lives at /usr/lib/gcc/i586-suse-linux/4.1.2/include/stdarg.h in Linux land) is missing in Solaris' GCC (which is version 3.4.3).

Hack #1:

	ln -s \
	/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/install-tools/include/stdarg.h \
	/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/include/stdarg.h

Hack #2: GNU programs...

	mkdir -p ~/gnulink;
	for i in addr2line ar as egrep grep ld make nm objcopy objdump \
	  ranlib readelf size string strip tar; do
		ln -s "/usr/sfw/bin/$i" "~/gnulink/$i";
	done;

	for i in cat chgrp chmod chown chroot cksum cmp cp cut date \
	  dd df diff du echo env expand expr false fgrep find fold \
	  getopt groups head hostid install join ln locate ls mkdir \
	  mkfifo mknod mv nice nohup od pwd rm rmdir sed seq shred \
	  sleep sort split stty tac tail tee touch tr true uname \
	  uniq uptime wc who whoami xargs yes gawk; do
		ln -s "/opt/csw/bin/$i" "~/gnulink/$i";
	done;

Hack #3: Diff file...

Hack #4: GNU ld glitch workaround (GNU ld looks in the current dir...)

	cd linux-2.6.21-rc3
	ln -s /usr/sfw/i386-sun-solaris2.11/lib/ldscripts ldscripts

Fun #1:

	export PATH="$HOME/gnulink:$PATH";
	make ARCH=i386

Oddity #1:

ARCH=i386 required because the Makefiles seem to use uname -m (which returns "i86pc") rather than uname -p. I think we are at odds here though...

uname -m uname -p
SOL i86pc i386
LINUX i686 athlon

Expect compiler failures, especially with assembler code.

Jan

<<< PATCH BELOW <<<

include/linux/input.h +3 -1
Index: linux-2.6.21-rc3/include/linux/input.h
===================================================================
@@ -16,7 +16,9 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
-#include <asm/types.h>
+#ifndef __sun__
+#	include <asm/types.h>
+#endif
 #endif
 
 /*
scripts/genksyms/genksyms.c +1 -0
Index: linux-2.6.21-rc3/scripts/genksyms/genksyms.c
===================================================================
@@ -21,6 +21,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
scripts/kallsyms.c +34 -0
Index: linux-2.6.21-rc3/scripts/kallsyms.c
===================================================================
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+     size_t haystack_len;
+     const void *needle;
+     size_t needle_len;
+{
+  const char *begin;
+  const char *const last_possible
+    = (const char *) haystack + haystack_len - needle_len;
+
+  if (needle_len == 0)
+    /* The first occurrence of the empty string is deemed to occur at
+       the beginning of the string.  */
+    return (void *) haystack;
+
+  /* Sanity check, otherwise the loop might search through the whole
+     memory.  */
+  if (__builtin_expect (haystack_len < needle_len, 0))
+    return NULL;
+
+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
+    if (begin[0] == ((const char *) needle)[0] &&
+        !memcmp ((const void *) &begin[1],
+                 (const void *) ((const char *) needle + 1),
+                 needle_len - 1))
+      return (void *) begin;
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)
scripts/kconfig/Makefile +1 -1
Index: linux-2.6.21-rc3/scripts/kconfig/Makefile
===================================================================
@@ -88,7 +88,7 @@
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:
scripts/kconfig/lxdialog/dialog.h +4 -0
Index: linux-2.6.21-rc3/scripts/kconfig/lxdialog/dialog.h
===================================================================
@@ -222,3 +222,7 @@
  *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
  */
 #define M_EVENT (KEY_MAX+1)
+
+#ifndef KEY_RESIZE
+#	define KEY_RESIZE 0632
+#endif
scripts/mod/file2alias.c +2 -0
Index: linux-2.6.21-rc3/scripts/mod/file2alias.c
===================================================================
@@ -32,6 +32,8 @@
 typedef uint32_t	__u32;
 typedef uint16_t	__u16;
 typedef unsigned char	__u8;
+typedef int32_t		__s32;
+typedef int16_t		__s16;
 
 /* Big exception to the "don't include kernel headers into userspace, which
  * even potentially has different endianness and word sizes, since
scripts/mod/modpost.h +5 -0
Index: linux-2.6.21-rc3/scripts/mod/modpost.h
===================================================================
@@ -41,6 +41,11 @@
 #define ELF_R_TYPE  ELF64_R_TYPE
 #endif
 
+#ifdef __sun__
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
 typedef struct
 {
scripts/mod/sumversion.c +3 -1
Index: linux-2.6.21-rc3/scripts/mod/sumversion.c
===================================================================
@@ -6,6 +6,7 @@
 #endif
 #include <ctype.h>
 #include <errno.h>
+#include <limits.h>
 #include <string.h>
 #include "modpost.h"
 
@@ -417,7 +418,8 @@
 	*end = '\0';
 
 	md4_init(&md);
-	while ((fname = strsep(&sources, " ")) != NULL) {
+	for(fname = strtok(sources, " "); fname != NULL;
+	  fname = strtok(NULL, " ")) {
 		if (!*fname)
 			continue;
 		if (!parse_source_files(fname, &md))

#<EOF>

#9 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

Quoted 10 lines · Jan Engelhardt
Quoted 1 line · Sam Ravnborg

Subject: Re: [PATCH] Fix building kernel under Solaris

Since Solaris seems to be on the run, I did myself try compile it. However, unlike the original poster who said he did so on SunOS 4.8, I did it on 5.11_snv39, yielding a bigger changeset. I thought I just share the diff that piled up so far. It needs a lot of hacks on the Solaris side - prioritizing GNU names, then, second, gnu ld has a glitch, then, gcc has a missing file... it's fun fun fun!

Can I please have a signed-off version of this patch.

Thanks,
Sam

Quoted 210 lines

Well, I will iterate the key problem with the missing file:

* include/linux/kernel.h (and many others) include <stdarg.h> BUT - since we are using -nostdinc, /usr/include/stdarg.h is not considered. And gcc's stdarg.h (which lives at /usr/lib/gcc/i586-suse-linux/4.1.2/include/stdarg.h in Linux land) is missing in Solaris' GCC (which is version 3.4.3).

Hack #1:

	ln -s \
	/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/install-tools/include/stdarg.h \
	/usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/include/stdarg.h

Hack #2: GNU programs...

	mkdir -p ~/gnulink;
	for i in addr2line ar as egrep grep ld make nm objcopy objdump \
	  ranlib readelf size string strip tar; do
		ln -s "/usr/sfw/bin/$i" "~/gnulink/$i";
	done;

	for i in cat chgrp chmod chown chroot cksum cmp cp cut date \
	  dd df diff du echo env expand expr false fgrep find fold \
	  getopt groups head hostid install join ln locate ls mkdir \
	  mkfifo mknod mv nice nohup od pwd rm rmdir sed seq shred \
	  sleep sort split stty tac tail tee touch tr true uname \
	  uniq uptime wc who whoami xargs yes gawk; do
		ln -s "/opt/csw/bin/$i" "~/gnulink/$i";
	done;

Hack #3: Diff file...

Hack #4: GNU ld glitch workaround (GNU ld looks in the current dir...)

	cd linux-2.6.21-rc3
	ln -s /usr/sfw/i386-sun-solaris2.11/lib/ldscripts ldscripts

Fun #1:

	export PATH="$HOME/gnulink:$PATH";
	make ARCH=i386

Oddity #1:

ARCH=i386 required because the Makefiles seem to use uname -m (which returns "i86pc") rather than uname -p. I think we are at odds here though...

uname -m uname -p
SOL i86pc i386
LINUX i686 athlon

Expect compiler failures, especially with assembler code.

Jan

<<< PATCH BELOW <<<

Index: linux-2.6.21-rc3/include/linux/input.h
===================================================================

include/linux/input.h +3 -1
@@ -16,7 +16,9 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
-#include <asm/types.h>
+#ifndef __sun__
+#	include <asm/types.h>
+#endif
 #endif
 
 /*

Index: linux-2.6.21-rc3/scripts/genksyms/genksyms.c
===================================================================

scripts/genksyms/genksyms.c +1 -0
@@ -21,6 +21,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>

Index: linux-2.6.21-rc3/scripts/kallsyms.c
===================================================================

scripts/kallsyms.c +34 -0
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+     size_t haystack_len;
+     const void *needle;
+     size_t needle_len;
+{
+  const char *begin;
+  const char *const last_possible
+    = (const char *) haystack + haystack_len - needle_len;
+
+  if (needle_len == 0)
+    /* The first occurrence of the empty string is deemed to occur at
+       the beginning of the string.  */
+    return (void *) haystack;
+
+  /* Sanity check, otherwise the loop might search through the whole
+     memory.  */
+  if (__builtin_expect (haystack_len < needle_len, 0))
+    return NULL;
+
+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
+    if (begin[0] == ((const char *) needle)[0] &&
+        !memcmp ((const void *) &begin[1],
+                 (const void *) ((const char *) needle + 1),
+                 needle_len - 1))
+      return (void *) begin;
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)

Index: linux-2.6.21-rc3/scripts/kconfig/Makefile
===================================================================

scripts/kconfig/Makefile +1 -1
@@ -88,7 +88,7 @@
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:

Index: linux-2.6.21-rc3/scripts/kconfig/lxdialog/dialog.h
===================================================================

scripts/kconfig/lxdialog/dialog.h +4 -0
@@ -222,3 +222,7 @@
  *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
  */
 #define M_EVENT (KEY_MAX+1)
+
+#ifndef KEY_RESIZE
+#	define KEY_RESIZE 0632
+#endif

Index: linux-2.6.21-rc3/scripts/mod/file2alias.c
===================================================================

scripts/mod/file2alias.c +2 -0
@@ -32,6 +32,8 @@
 typedef uint32_t	__u32;
 typedef uint16_t	__u16;
 typedef unsigned char	__u8;
+typedef int32_t		__s32;
+typedef int16_t		__s16;
 
 /* Big exception to the "don't include kernel headers into userspace, which
  * even potentially has different endianness and word sizes, since

Index: linux-2.6.21-rc3/scripts/mod/modpost.h
===================================================================

scripts/mod/modpost.h +5 -0
@@ -41,6 +41,11 @@
 #define ELF_R_TYPE  ELF64_R_TYPE
 #endif
 
+#ifdef __sun__
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
 typedef struct
 {

Index: linux-2.6.21-rc3/scripts/mod/sumversion.c
===================================================================

scripts/mod/sumversion.c +3 -1
@@ -6,6 +6,7 @@
 #endif
 #include <ctype.h>
 #include <errno.h>
+#include <limits.h>
 #include <string.h>
 #include "modpost.h"
 
@@ -417,7 +418,8 @@
 	*end = '\0';
 
 	md4_init(&md);
-	while ((fname = strsep(&sources, " ")) != NULL) {
+	for(fname = strtok(sources, " "); fname != NULL;
+	  fname = strtok(NULL, " ")) {
 		if (!*fname)
 			continue;
 		if (!parse_source_files(fname, &md))

#<EOF>

#10 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

Quoted 10 lines · Sam Ravnborg
Quoted 7 lines · Jan Engelhardt

Since Solaris seems to be on the run, I did myself try compile it. However, unlike the original poster who said he did so on SunOS 4.8, I did it on 5.11_snv39, yielding a bigger changeset. I thought I just share the diff that piled up so far. It needs a lot of hacks on the Solaris side - prioritizing GNU names, then, second, gnu ld has a glitch, then, gcc has a missing file... it's fun fun fun!

Can I please have a signed-off version of this patch.

_Are you sure_ you want all these hacks without further review from other people? Also note the patch is incomplete, for example I could not compile the acpi pieces because acsolaris.h -- which is referenced in the acpi includes -- does not exist. (Yet another piece of software that has crossplatform compatibilty stuff, like XFS.)

Quoted 11 lines

include/linux/input.h line 22

Quoted 11 lines
include/linux/input.h +3 -1
@@ -16,7 +16,9 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
-#include <asm/types.h>
+#ifndef __sun__
+#	include <asm/types.h>
+#endif
 #endif

This is not a proper fix for sure. The problem lies in file2alias.c, see (your own) http://lkml.org/lkml/2007/3/8/339

Quoted 8 lines
Quoted 8 lines

Index: linux-2.6.21-rc3/scripts/genksyms/genksyms.c
===================================================================

scripts/genksyms/genksyms.c +0 -0
@@ -21,6 +21,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
Quoted 4 lines

scripts/genksyms/genksyms.c line 27

Quoted 4 lines
scripts/genksyms/genksyms.c +1 -0
+#include <alloca.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>

This is however, is valid. Can I gave sign-offs for single hunks?

Quoted 37 lines
Quoted 37 lines

Index: linux-2.6.21-rc3/scripts/kallsyms.c
===================================================================

scripts/kallsyms.c +29 -0
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+     size_t haystack_len;
+     const void *needle;
+     size_t needle_len;
+{
+  const char *begin;
+  const char *const last_possible
+    = (const char *) haystack + haystack_len - needle_len;
+
+  if (needle_len == 0)
+    /* The first occurrence of the empty string is deemed to occur at
+       the beginning of the string.  */
+    return (void *) haystack;
+
+  /* Sanity check, otherwise the loop might search through the whole
+     memory.  */
+  if (__builtin_expect (haystack_len < needle_len, 0))
+    return NULL;
+
+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
+    if (begin[0] == ((const char *) needle)[0] &&
+        !memcmp ((const void *) &begin[1],
+                 (const void *) ((const char *) needle + 1),
+                 needle_len - 1))
+      return (void *) begin;
Quoted 8 lines

scripts/kallsyms.c line 417

Quoted 8 lines
scripts/kallsyms.c +5 -0
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)

This one, I am just waiting for someone to object to the extra #if-#endif.

Quoted 8 lines
Quoted 8 lines

Index: linux-2.6.21-rc3/scripts/kconfig/Makefile
===================================================================

scripts/kconfig/Makefile +0 -0
@@ -88,7 +88,7 @@
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
Quoted 5 lines

scripts/kconfig/Makefile line 94

Quoted 5 lines
scripts/kconfig/Makefile +1 -1
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:

The error message for this one was: <stdbool.h> only valid in C99 mode. Linux GCC 4.1.2 does not print that, Solaris GCC 3.4.3 does. I do not know offhand who is right.

Quoted 4 lines
Quoted 4 lines

Index: linux-2.6.21-rc3/scripts/kconfig/lxdialog/dialog.h
===================================================================

scripts/kconfig/lxdialog/dialog.h +0 -0
Quoted 8 lines

scripts/kconfig/lxdialog/dialog.h line 228

Quoted 8 lines
scripts/kconfig/lxdialog/dialog.h +4 -0
@@ -222,3 +222,7 @@
  *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
  */
 #define M_EVENT (KEY_MAX+1)
+
+#ifndef KEY_RESIZE
+#	define KEY_RESIZE 0632
+#endif

Solaris only has curses, not ncurses. Consider this a supreme hack. In fact, menuconfig has some weird display errors still.

Quoted 11 lines
Quoted 11 lines

Index: linux-2.6.21-rc3/scripts/mod/file2alias.c
===================================================================

scripts/mod/file2alias.c +2 -0
@@ -32,6 +32,8 @@
 typedef uint32_t	__u32;
 typedef uint16_t	__u16;
 typedef unsigned char	__u8;
+typedef int32_t		__s32;
+typedef int16_t		__s16;
 
Quoted 2 lines

scripts/mod/file2alias.c line 39

Quoted 2 lines
scripts/mod/file2alias.c +0 -0
 /* Big exception to the "don't include kernel headers into userspace, which
  * even potentially has different endianness and word sizes, since

HAX.

Quoted 8 lines
Quoted 8 lines

Index: linux-2.6.21-rc3/scripts/mod/modpost.h
===================================================================

scripts/mod/modpost.h +0 -0
@@ -41,6 +41,11 @@
 #define ELF_R_TYPE  ELF64_R_TYPE
 #endif
 
Quoted 8 lines

scripts/mod/modpost.h line 51

Quoted 8 lines
scripts/mod/modpost.h +5 -0
+#ifdef __sun__
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
 typedef struct
 {

More HAX because Sol does not have them >:-(

Quoted 4 lines
Quoted 4 lines

Index: linux-2.6.21-rc3/scripts/mod/sumversion.c
===================================================================

scripts/mod/sumversion.c +0 -0
Quoted 8 lines

scripts/mod/sumversion.c line 12

Quoted 8 lines
scripts/mod/sumversion.c +1 -0
@@ -6,6 +6,7 @@
 #endif
 #include <ctype.h>
 #include <errno.h>
+#include <limits.h>
 #include <string.h>
 #include "modpost.h"
 

Valid hunk, should be applied (to get the PATH_MAX constant).

Quoted 11 lines
Quoted 11 lines
scripts/mod/sumversion.c +2 -1
@@ -417,7 +418,8 @@
 	*end = '\0';
 
 	md4_init(&md);
-	while ((fname = strsep(&sources, " ")) != NULL) {
+	for(fname = strtok(sources, " "); fname != NULL;
+	  fname = strtok(NULL, " ")) {
 		if (!*fname)
 			continue;
 		if (!parse_source_files(fname, &md))

#<EOF>

See thread debate as to whether to keep strsep or use strtok, since strtok is not thread-safe, and strtok_r is a GNUism unlikely to be available in Solaris either.

Jan

#11 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

Quoted 11 lines · Jan Engelhardt
Quoted 9 lines · Sam Ravnborg
Quoted 7 lines · Jan Engelhardt

Since Solaris seems to be on the run, I did myself try compile it. However, unlike the original poster who said he did so on SunOS 4.8, I did it on 5.11_snv39, yielding a bigger changeset. I thought I just share the diff that piled up so far. It needs a lot of hacks on the Solaris side - prioritizing GNU names, then, second, gnu ld has a glitch, then, gcc has a missing file... it's fun fun fun!

Quoted 8 lines
Quoted 1 line

Can I please have a signed-off version of this patch.

_Are you sure_ you want all these hacks without further review from other people? Also note the patch is incomplete, for example I could not compile the acpi pieces because acsolaris.h -- which is referenced in the acpi includes -- does not exist. (Yet another piece of software that has crossplatform compatibilty stuff, like XFS.)

The Signed-off-by: document the origin of the path. I'm planning only to take the sensible bits of the patch anyway.

Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
include/linux/input.h +0 -0
@@ -16,7 +16,9 @@
 #include <sys/time.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
Quoted 8 lines
Quoted 5 lines

include/linux/input.h line 22

Quoted 5 lines
include/linux/input.h +3 -1
-#include <asm/types.h>
+#ifndef __sun__
+#	include <asm/types.h>
+#endif
 #endif

This is not a proper fix for sure. The problem lies in file2alias.c, see (your own) http://lkml.org/lkml/2007/3/8/339

I already committed my own fix - so this chunk can be ignored.

Quoted 9 lines
Quoted 9 lines
Quoted 9 lines

Index: linux-2.6.21-rc3/scripts/genksyms/genksyms.c
===================================================================

scripts/genksyms/genksyms.c +0 -0
@@ -21,6 +21,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
Quoted 6 lines
Quoted 4 lines

scripts/genksyms/genksyms.c line 27

Quoted 4 lines
scripts/genksyms/genksyms.c +1 -0
+#include <alloca.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>

This is however, is valid. Can I gave sign-offs for single hunks?

Agree and yes.

Quoted 9 lines
Quoted 9 lines
Quoted 9 lines

Index: linux-2.6.21-rc3/scripts/kallsyms.c
===================================================================

scripts/kallsyms.c +0 -0
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
Quoted 16 lines
Quoted 6 lines
Quoted 6 lines
scripts/kallsyms.c +6 -0
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+      return (void *) begin;
Quoted 8 lines

scripts/kallsyms.c line 394

Quoted 8 lines
scripts/kallsyms.c +5 -0
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)

This one, I am just waiting for someone to object to the extra #if-#endif.

I was planning to ask Paulo if strstr could not be used - Paulo?

Quoted 12 lines
Quoted 12 lines
Quoted 12 lines

Index: linux-2.6.21-rc3/scripts/kconfig/Makefile
===================================================================

scripts/kconfig/Makefile +1 -1
@@ -88,7 +88,7 @@
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
Quoted 6 lines
Quoted 2 lines

scripts/kconfig/Makefile line 94

Quoted 2 lines
scripts/kconfig/Makefile +0 -0
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:

The error message for this one was: <stdbool.h> only valid in C99 mode. Linux GCC 4.1.2 does not print that, Solaris GCC 3.4.3 does. I do not know offhand who is right.

The -std= looks safe. The __EXTENSIONS__ part seems safe and needed after a bit googling.

Quoted 16 lines
Quoted 13 lines

scripts/kconfig/lxdialog/dialog.h line 228

Quoted 13 lines

Index: linux-2.6.21-rc3/scripts/kconfig/lxdialog/dialog.h
===================================================================

scripts/kconfig/lxdialog/dialog.h +4 -0
@@ -222,3 +222,7 @@
  *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
  */
 #define M_EVENT (KEY_MAX+1)
+
+#ifndef KEY_RESIZE
+#	define KEY_RESIZE 0632
+#endif

Solaris only has curses, not ncurses. Consider this a supreme hack. In fact, menuconfig has some weird display errors still.

This hack looks OK to me.

Quoted 12 lines
Quoted 12 lines
Quoted 12 lines

Index: linux-2.6.21-rc3/scripts/mod/file2alias.c
===================================================================

scripts/mod/file2alias.c +2 -0
@@ -32,6 +32,8 @@
 typedef uint32_t	__u32;
 typedef uint16_t	__u16;
 typedef unsigned char	__u8;
+typedef int32_t		__s32;
+typedef int16_t		__s16;
 
Quoted 4 lines
Quoted 2 lines

scripts/mod/file2alias.c line 39

Quoted 2 lines
scripts/mod/file2alias.c +0 -0
 /* Big exception to the "don't include kernel headers into userspace, which
  * even potentially has different endianness and word sizes, since

HAX.

This goes away when we do not include input.h I think.

Quoted 9 lines
Quoted 9 lines
Quoted 9 lines

Index: linux-2.6.21-rc3/scripts/mod/modpost.h
===================================================================

scripts/mod/modpost.h +0 -0
@@ -41,6 +41,11 @@
 #define ELF_R_TYPE  ELF64_R_TYPE
 #endif
 
Quoted 10 lines
Quoted 8 lines

scripts/mod/modpost.h line 51

Quoted 8 lines
scripts/mod/modpost.h +5 -0
+#ifdef __sun__
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
 typedef struct
 {

More HAX because Sol does not have them >:-(

Yup - but needed.

Quoted 15 lines
Quoted 13 lines

scripts/mod/sumversion.c line 12

Quoted 13 lines

Index: linux-2.6.21-rc3/scripts/mod/sumversion.c
===================================================================

scripts/mod/sumversion.c +1 -0
@@ -6,6 +6,7 @@
 #endif
 #include <ctype.h>
 #include <errno.h>
+#include <limits.h>
 #include <string.h>
 #include "modpost.h"
 

Valid hunk, should be applied (to get the PATH_MAX constant).

Yes.

Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
scripts/mod/sumversion.c +0 -0
@@ -417,7 +418,8 @@
 	*end = '\0';
 
Quoted 12 lines
Quoted 8 lines
Quoted 8 lines
scripts/mod/sumversion.c +2 -1
 	md4_init(&md);
-	while ((fname = strsep(&sources, " ")) != NULL) {
+	for(fname = strtok(sources, " "); fname != NULL;
+	  fname = strtok(NULL, " ")) {
 		if (!*fname)
 			continue;
 		if (!parse_source_files(fname, &md))

#<EOF>

See thread debate as to whether to keep strsep or use strtok, since strtok is not thread-safe, and strtok_r is a GNUism unlikely to be available in Solaris either.

For this usage the thread safety does not matter as I see it. But we can just open code it:

scripts/mod/sumversion.c +8 -5
index 8a28756..d10a6a3 100644
@@ -379,7 +379,7 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen)
 	void *file;
 	unsigned long len;
 	struct md4_ctx md;
-	char *sources, *end, *fname;
+	char *sources, *end, *fname, *endname;
 	const char *basename;
 	char filelist[PATH_MAX + 1];
 	char *modverdir = getenv("MODVERDIR");
@@ -417,13 +417,16 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen)
 	*end = '\0';
 
 	md4_init(&md);
-	while ((fname = strsep(&sources, " ")) != NULL) {
-		if (!*fname)
-			continue;
+	fname = endname = sources;
+	while ((endname != end) && *fname) {
+		char *endname = fname;
+		while (*endname && !isspace(*endname))
+			endname++;
+		*endname = '\0';
 		if (!parse_source_files(fname, &md))
 			goto release;
+		fname = ++endname;
 	}
-
 	md4_final_ascii(&md, sum, sumlen);
 release:
 	release_file(file, len);

Sam

#12 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

Quoted 9 lines · Sam Ravnborg

Date: Fri, 9 Mar 2007 23:23:32 +0100
From: Sam Ravnborg <[email protected]>
To: Jan Engelhardt <[email protected]>,
Paulo Marques <[email protected]>
Cc: [email protected], Christoph Hellwig <[email protected]>,
Deepak Saxena <[email protected]>,
Andrew Morton <[email protected]>, [email protected]
Subject: Re: [PATCH] Fix building kernel under Solaris 11_snv

Reference: http://lkml.org/lkml/2007/3/8/368

Happy cherrypicking.
More comments below.

Quoted 25 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines

Index: linux-2.6.21-rc3/scripts/kallsyms.c
===================================================================

scripts/kallsyms.c +0 -0
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
Quoted 16 lines
Quoted 6 lines
Quoted 6 lines
scripts/kallsyms.c +6 -0
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+      return (void *) begin;
Quoted 8 lines

scripts/kallsyms.c line 394

Quoted 8 lines
scripts/kallsyms.c +5 -0
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)

This one, I am just waiting for someone to object to the extra #if-#endif.

Quoted 1 line

I was planning to ask Paulo if strstr could not be used - Paulo?

I am not sure, but I would tend to say "no".

kallsyms.c:

	p1 = table[i].sym;                                              
                                                                                
	/* find the token on the symbol */                              
	p2 = memmem(p1, len, str, 2);                                   
	if (!p2) continue;                                              

My first impression would be that 'p1' is a multi-nul-terminated string array ("foo\0bar\0next\0symbol\0..."), much like the entire .strtab section (I have not actually bothered to check, so it is a raw guess), and I do not think strstr would replace memmem here if that was the case.

Quoted 18 lines
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines

Index: linux-2.6.21-rc3/scripts/kconfig/Makefile
===================================================================

scripts/kconfig/Makefile +1 -1
@@ -88,7 +88,7 @@
 HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
Quoted 6 lines
Quoted 2 lines

scripts/kconfig/Makefile line 94

Quoted 2 lines
scripts/kconfig/Makefile +0 -0
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:

The error message for this one was: <stdbool.h> only valid in C99 mode. Linux GCC 4.1.2 does not print that, Solaris GCC 3.4.3 does. I do not know offhand who is right.

Quoted 2 lines

The -std= looks safe. The __EXTENSIONS__ part seems safe and needed after a bit googling.

Humm humm. Linux's /usr/include does not have any (glibc) file with the string __EXTENSIONS__ in it. Though, the linux manpage for fileno() does not mention fileno() conforming to anything. Under Linux, fileno() is wrapped inside __USE_POSIX, and the comments in Solaris's headers also indicate it is something posixy.

Perhaps have something like

#ifdef __sun__
# define __EXTENSIONS__ 1
#endif

Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines

Index: linux-2.6.21-rc3/scripts/mod/file2alias.c
===================================================================

scripts/mod/file2alias.c +2 -0
@@ -32,6 +32,8 @@
 typedef uint32_t	__u32;
 typedef uint16_t	__u16;
 typedef unsigned char	__u8;
+typedef int32_t		__s32;
+typedef int16_t		__s16;
 
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines

scripts/mod/file2alias.c line 39

Quoted 2 lines
scripts/mod/file2alias.c +0 -0
 /* Big exception to the "don't include kernel headers into userspace, which
  * even potentially has different endianness and word sizes, since

HAX.

This goes away when we do not include input.h I think.

Exactly.

Quoted 19 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines

Index: linux-2.6.21-rc3/scripts/mod/modpost.h
===================================================================

scripts/mod/modpost.h +0 -0
@@ -41,6 +41,11 @@
 #define ELF_R_TYPE  ELF64_R_TYPE
 #endif
 
Quoted 10 lines
Quoted 8 lines

scripts/mod/modpost.h line 51

Quoted 8 lines
scripts/mod/modpost.h +5 -0
+#ifdef __sun__
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf64_Section;
+#endif
+
 /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
 typedef struct
 {

More HAX because Sol does not have them >:-(

Quoted 1 line

Yup - but needed.

How much do we want to support Solaris anyway? It's like trying to make ICC a thoroughly supported compiler. Hey, do we want to support GCC compilation under BSD too? What about CYGWIN - there have been efforts before! :p Seriously, what build platforms do we want to support in the near future?

Thanks,
Jan

#13 lore raw

Re: [PATCH] Fix building kernel under Solaris 11_snv

In reply to Sam Ravnborg
Quoted 23 lines · Sam Ravnborg
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines

===================================================================

scripts/kallsyms.c +0 -0
@@ -378,6 +378,40 @@
 	table_cnt = pos;
 }
 
Quoted 16 lines
Quoted 6 lines
Quoted 6 lines
scripts/kallsyms.c +6 -0
+#ifdef __sun__
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+void *
+memmem (haystack, haystack_len, needle, needle_len)
+     const void *haystack;
+      return (void *) begin;
Quoted 8 lines

scripts/kallsyms.c line 394

Quoted 8 lines
scripts/kallsyms.c +5 -0
+
+  return NULL;
+}
+#endif
+
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
 static void compress_symbols(unsigned char *str, int idx)

This one, I am just waiting for someone to object to the extra #if-#endif.

Quoted 1 line

I was planning to ask Paulo if strstr could not be used - Paulo?

Yeah. And if we can't use something else all the missing functions should be in a compat-solaris.c files, similarly to how sparse handles missing functions on various systems instead of polluting implementation files with ifdefs and duplicates of library code.

Quoted 10 lines
Quoted 9 lines
Quoted 5 lines

scripts/kallsyms.c

Quoted 5 lines
scripts/kallsyms.c +1 -1
-HOST_EXTRACFLAGS += -DLOCALE
+HOST_EXTRACFLAGS += -DLOCALE -std=c99 -D__EXTENSIONS__
 
 PHONY += $(obj)/dochecklxdialog
 $(obj)/dochecklxdialog:

The error message for this one was: <stdbool.h> only valid in C99 mode. Linux GCC 4.1.2 does not print that, Solaris GCC 3.4.3 does. I do not know offhand who is right.

The -std= looks safe.

It's not though. It's a gccisms, and I'm not sure we want to mandate gcc for the host copiler, given that the only way you'd build a working kernel on a foreign system would be a cross compilation anyway.

Quoted 9 lines
Quoted 8 lines
Quoted 5 lines

scripts/kallsyms.c

Quoted 5 lines

#define M_EVENT (KEY_MAX+1)

scripts/kallsyms.c +4 -0
+
+#ifndef KEY_RESIZE
+#	define KEY_RESIZE 0632
+#endif

Solaris only has curses, not ncurses. Consider this a supreme hack. In fact, menuconfig has some weird display errors still.

This hack looks OK to me.

Except that solaris curses doesn't actually understand this random value for KEY_RESIZE. Either we mandate that ncurses is installed on the host for menuconfig to work (and ncurses at least used to work on most unix variants), or some needs to do a proper curses port.