From: Sam Ravnborg <sam@ravnborg.org>
To: Jan Engelhardt <jengelh@linux01.gwdg.de>
Cc: dmitry.torokhov@gmail.com, Christoph Hellwig <hch@infradead.org>,
Deepak Saxena <dsaxena@plexity.net>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Fix building kernel under Solaris 11_snv
Date: Fri, 9 Mar 2007 20:00:54 +0100 [thread overview]
Message-ID: <20070309190054.GA18641@uranus.ravnborg.org> (raw)
In-Reply-To: <Pine.LNX.4.61.0703082242020.521@yvahk01.tjqt.qr>
On Thu, Mar 08, 2007 at 11:01:57PM +0100, Jan Engelhardt wrote:
>
> On Mar 8 2007 22:25, Sam Ravnborg wrote:
> >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
>
> 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
> ===================================================================
> --- linux-2.6.21-rc3.orig/include/linux/input.h 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/include/linux/input.h 2007-03-07 23:40:39.417339000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/genksyms/genksyms.c 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/genksyms/genksyms.c 2007-03-07 23:28:35.659555000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/kallsyms.c 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/kallsyms.c 2007-03-07 23:46:46.249005000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/kconfig/Makefile 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/kconfig/Makefile 2007-03-07 23:21:19.730679000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/kconfig/lxdialog/dialog.h 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/kconfig/lxdialog/dialog.h 2007-03-07 23:14:48.462956000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/mod/file2alias.c 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/mod/file2alias.c 2007-03-07 23:41:23.772026000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/mod/modpost.h 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/mod/modpost.h 2007-03-07 23:37:01.315290000 +0100
> @@ -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
> ===================================================================
> --- linux-2.6.21-rc3.orig/scripts/mod/sumversion.c 2007-03-07 05:41:20.000000000 +0100
> +++ linux-2.6.21-rc3/scripts/mod/sumversion.c 2007-03-07 23:43:55.668334000 +0100
> @@ -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>
next prev parent reply other threads:[~2007-03-09 19:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-06 18:09 [PATCH] Fix building kernel under Solaris Deepak Saxena
2007-03-06 18:22 ` Deepak Saxena
2007-03-06 19:23 ` Sam Ravnborg
2007-03-07 9:42 ` Christoph Hellwig
2007-03-07 22:45 ` Jan Engelhardt
2007-03-08 8:35 ` Christoph Hellwig
2007-03-08 20:43 ` Jan Engelhardt
2007-03-08 21:25 ` Sam Ravnborg
2007-03-08 22:01 ` [PATCH] Fix building kernel under Solaris 11_snv Jan Engelhardt
2007-03-09 19:00 ` Sam Ravnborg [this message]
2007-03-09 20:16 ` Jan Engelhardt
2007-03-09 22:23 ` Sam Ravnborg
2007-03-09 22:55 ` Jan Engelhardt
2007-03-10 9:37 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070309190054.GA18641@uranus.ravnborg.org \
--to=sam@ravnborg.org \
--cc=akpm@linux-foundation.org \
--cc=dmitry.torokhov@gmail.com \
--cc=dsaxena@plexity.net \
--cc=hch@infradead.org \
--cc=jengelh@linux01.gwdg.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome