Fix building kernel under Solaris
Subsystems (3)
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
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
__s32and__s16- Need to define
Elf32_SectionandElf64_Section- Solaris does not provide strsep
Signed-off-by Deepak Saxena <[email protected]>diff -uNr -X
/home/src/dontdiff/home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.hlinux-2.6.18_pro500/include/linux/input.hinclude/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/Makefilelinux-2.6.18_pro500/scripts/Makefilescripts/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) += genksymsdiff -uNr -X
/home/src/dontdiff/home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/file2alias.clinux-2.6.18_pro500/scripts/mod/file2alias.cscripts/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.hlinux-2.6.18_pro500/scripts/mod/modpost.hscripts/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_Ehdrdiff -uNr -X
/home/src/dontdiff/home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.clinux-2.6.18_pro500/scripts/mod/sumversion.cscripts/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
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
__s32and__s16- Need to define
Elf32_SectionandElf64_Section- Solaris does not provide strsep
Signed-off-by Deepak Saxena <[email protected]>diff -uNr -X
/home/src/dontdiff/home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/include/linux/input.hlinux-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/Makefilelinux-2.6.18_pro500/scripts/Makefilescripts/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
-1hostprogs-$(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.hlinux-2.6.18_pro500/scripts/mod/modpost.hscripts/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_Ehdrdiff -uNr -X
/home/src/dontdiff/home/src/mvista/kernel/PRO5-CLEAN/linux-2.6.18/scripts/mod/sumversion.clinux-2.6.18_pro500/scripts/mod/sumversion.cscripts/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
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
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
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
__s32and__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.
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
__s32and__s16.We shouldn't use those from
asm/types.hon 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
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 +#endifSo if solaris doesn't need it, why do we need it on Linux?
For
__s32and__s16.
Quoted 7 lines
Quoted 3 lines
We shouldn't use those from
asm/types.hon 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.cincludes "../../include/linux/input.h" and it is _input.h_ that requires __s16/__s32 and hence includes <asm/types.h>. If you ask me, it'sfile2alias.cthat'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
@@ -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
@@ -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
@@ -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 ; }
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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>
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.his not considered. And gcc'sstdarg.h(which lives at/usr/lib/gcc/i586-suse-linux/4.1.2/include/stdarg.hin 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.hHack #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 ldscriptsFun #1:
export PATH="$HOME/gnulink:$PATH"; make ARCH=i386Oddity #1:
ARCH=i386 required because the Makefiles seem to use
uname -m(which returns "i86pc") rather thanuname -p. I think we are at odds here though...uname -m uname -p
SOL i86pc i386
LINUX i686 athlonExpect 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>
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
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.
_Areyousure_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 becauseacsolaris.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
-0PHONY += $(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_MAXconstant).
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
-1md4_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_ris 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
@@ -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
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
-0PHONY += $(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.hI 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
Re: [PATCH] Fix building kernel under Solaris 11_snv
In reply to Sam RavnborgQuoted 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.