still inverstigating sparc, belows fixed i386 build
and tested utils on it.
fixes fallout:
gcc -Wp,-MD,usr/klibc/.vsnprintf.o.d -nostdinc -iwithprefix include
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386
-Iusr/include/arch/i386
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/bits32
-Iusr/include/bits32
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include
-Iusr/klibc/../include
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include
-Iusr/include
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/include
-Ilinux/include
-I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/arch/i386/include
-Ilinux/arch/i386/include -D__KLIBC__=1 -D__KLIBC_MINOR__=5 -D_BITSIZE=32
-fno-stack-protector -mregparm=3 -D_REGPARM=3 -m32 -march=i386 -Os -g
-fomit-frame-pointer -falign-functions=0 -falign-jumps=0 -falign-loops=0 -W
-Wall -Wno-sign-compare -Wno-unused-parameter -c -o usr/klibc/vsnprintf.o
usr/klibc/vsnprintf.c
In file included from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:99,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11,
from usr/klibc/vsnprintf.c:13:
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/include/asm-generic/signal.h:7:1:
warning: "_NSIG_BPW" redefined
In file included from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11,
from usr/klibc/vsnprintf.c:13:
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:17:1:
warning: this is the location of the previous definition
In file included from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:99,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12,
from
/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11,
from usr/klibc/vsnprintf.c:13:
commit 3cd286a4bff43ea339d2a815047703d134c0ecfc
Author: maximilian attems <max at stro.at>
Date: Mon Mar 15 02:35:43 2010 +0100
[klibc] Use x86_32 cleaned up signal.h
x86 merges cleaned the header up, do the inverse then arm:
nuke duplication.
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/include/arch/i386/klibc/archsignal.h
b/usr/include/arch/i386/klibc/archsignal.h
index 6c942db..c83fc8f 100644
--- a/usr/include/arch/i386/klibc/archsignal.h
+++ b/usr/include/arch/i386/klibc/archsignal.h
@@ -1,5 +1,4 @@
/*
- * arch/i386/include/klibc/archsignal.h
*
* Architecture-specific signal definitions
*
@@ -8,107 +7,8 @@
#ifndef _KLIBC_ARCHSIGNAL_H
#define _KLIBC_ARCHSIGNAL_H
-/* The in-kernel headers for i386 still have libc5
- crap in them. Reconsider using <asm/signal.h>
- when/if it gets cleaned up; for now, duplicate
- the definitions here. */
+/* The in-kernel headers for i386 got clean up, use them. */
-#define _NSIG 64
-#define _NSIG_BPW 32
-#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
-
-typedef struct {
- unsigned long sig[_NSIG_WORDS];
-} sigset_t;
-
-#define SIGHUP 1
-#define SIGINT 2
-#define SIGQUIT 3
-#define SIGILL 4
-#define SIGTRAP 5
-#define SIGABRT 6
-#define SIGIOT 6
-#define SIGBUS 7
-#define SIGFPE 8
-#define SIGKILL 9
-#define SIGUSR1 10
-#define SIGSEGV 11
-#define SIGUSR2 12
-#define SIGPIPE 13
-#define SIGALRM 14
-#define SIGTERM 15
-#define SIGSTKFLT 16
-#define SIGCHLD 17
-#define SIGCONT 18
-#define SIGSTOP 19
-#define SIGTSTP 20
-#define SIGTTIN 21
-#define SIGTTOU 22
-#define SIGURG 23
-#define SIGXCPU 24
-#define SIGXFSZ 25
-#define SIGVTALRM 26
-#define SIGPROF 27
-#define SIGWINCH 28
-#define SIGIO 29
-#define SIGPOLL SIGIO
-#define SIGPWR 30
-#define SIGSYS 31
-#define SIGUNUSED 31
-
-#define SIGRTMIN 32
-#define SIGRTMAX (_NSIG-1)
-
-/*
- * SA_FLAGS values:
- *
- * SA_ONSTACK indicates that a registered stack_t will be used.
- * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
- * SA_RESTART flag to get restarting signals (which were the default long ago)
- * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
- * SA_RESETHAND clears the handler when the signal is delivered.
- * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
- * SA_NODEFER prevents the current signal from being masked in the handler.
- *
- * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
- * Unix names RESETHAND and NODEFER respectively.
- */
-#define SA_NOCLDSTOP 0x00000001u
-#define SA_NOCLDWAIT 0x00000002u
-#define SA_SIGINFO 0x00000004u
-#define SA_ONSTACK 0x08000000u
-#define SA_RESTART 0x10000000u
-#define SA_NODEFER 0x40000000u
-#define SA_RESETHAND 0x80000000u
-
-#define SA_NOMASK SA_NODEFER
-#define SA_ONESHOT SA_RESETHAND
-#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
-
-#define SA_RESTORER 0x04000000
-
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK 1
-#define SS_DISABLE 2
-
-#define MINSIGSTKSZ 2048
-#define SIGSTKSZ 8192
-
-#include <asm-generic/signal.h>
-
-/* This uses gcc anonymous union support... */
-struct siginfo;
-
-struct sigaction {
- union {
- __sighandler_t sa_handler;
- void (*sa_sigaction)(int, struct siginfo *, void *);
- };
- unsigned long sa_flags;
- __sigrestore_t sa_restorer;
- sigset_t sa_mask;
-};
+#include <linux/signal.h>
#endif
Sergey Vlasov
2010-May-10 20:28 UTC
[klibc] signal handling broken on i386 (Re: fix i386 build)
On Mon, Mar 15, 2010 at 02:44:47AM +0100, maximilian attems wrote:> still inverstigating sparc, belows fixed i386 build > and tested utils on it. > > fixes fallout: > gcc -Wp,-MD,usr/klibc/.vsnprintf.o.d -nostdinc -iwithprefix include -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386 -Iusr/include/arch/i386 -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/bits32 -Iusr/include/bits32 -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include -Iusr/klibc/../include -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include -Iusr/include -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/include -Ilinux/include -I/build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/arch/i386/include -Ilinux/arch/i386/include -D__KLIBC__=1 -D__KLIBC_MINOR__=5 -D_BITSIZE=32 -fno-stack-protector -mregparm=3 -D_REGPARM=3 -m32 -march=i386 -Os -g -fomit-frame-pointer -falign-functions=0 -falign-jumps=0 -falign-loops=0 -W -Wall -Wno-sign-compare -Wno-unused-parameter -c -o usr/klibc/vsnprintf.o usr/klibc/vsnprintf.c > In file included from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:99, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11, > from usr/klibc/vsnprintf.c:13: > /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/linux/include/asm-generic/signal.h:7:1: warning: "_NSIG_BPW" redefined > In file included from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11, > from usr/klibc/vsnprintf.c:13: > /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:17:1: warning: this is the location of the previous definition > In file included from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/include/arch/i386/klibc/archsignal.h:99, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/signal.h:14, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/sys/select.h:11, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/unistd.h:12, > from /build/buildd-klibc_1.5.16-1-i386-e8cAsi/klibc-1.5.16/usr/klibc/../include/stdio.h:11, > from usr/klibc/vsnprintf.c:13: > > > commit 3cd286a4bff43ea339d2a815047703d134c0ecfc > Author: maximilian attems <max at stro.at> > Date: Mon Mar 15 02:35:43 2010 +0100 > > [klibc] Use x86_32 cleaned up signal.h > > x86 merges cleaned the header up, do the inverse then arm: > nuke duplication. > > Signed-off-by: maximilian attems <max at stro.at> > > diff --git a/usr/include/arch/i386/klibc/archsignal.h b/usr/include/arch/i386/klibc/archsignal.h > index 6c942db..c83fc8f 100644 > --- a/usr/include/arch/i386/klibc/archsignal.h > +++ b/usr/include/arch/i386/klibc/archsignal.h > @@ -1,5 +1,4 @@ > /* > - * arch/i386/include/klibc/archsignal.h > * > * Architecture-specific signal definitions > * > @@ -8,107 +7,8 @@ > #ifndef _KLIBC_ARCHSIGNAL_H > #define _KLIBC_ARCHSIGNAL_H > > -/* The in-kernel headers for i386 still have libc5 > - crap in them. Reconsider using <asm/signal.h> > - when/if it gets cleaned up; for now, duplicate > - the definitions here. */ > +/* The in-kernel headers for i386 got clean up, use them. */ > > -#define _NSIG 64 > -#define _NSIG_BPW 32 > -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) > - > -typedef struct { > - unsigned long sig[_NSIG_WORDS]; > -} sigset_t; > - > -#define SIGHUP 1 > -#define SIGINT 2 > -#define SIGQUIT 3 > -#define SIGILL 4 > -#define SIGTRAP 5 > -#define SIGABRT 6 > -#define SIGIOT 6 > -#define SIGBUS 7 > -#define SIGFPE 8 > -#define SIGKILL 9 > -#define SIGUSR1 10 > -#define SIGSEGV 11 > -#define SIGUSR2 12 > -#define SIGPIPE 13 > -#define SIGALRM 14 > -#define SIGTERM 15 > -#define SIGSTKFLT 16 > -#define SIGCHLD 17 > -#define SIGCONT 18 > -#define SIGSTOP 19 > -#define SIGTSTP 20 > -#define SIGTTIN 21 > -#define SIGTTOU 22 > -#define SIGURG 23 > -#define SIGXCPU 24 > -#define SIGXFSZ 25 > -#define SIGVTALRM 26 > -#define SIGPROF 27 > -#define SIGWINCH 28 > -#define SIGIO 29 > -#define SIGPOLL SIGIO > -#define SIGPWR 30 > -#define SIGSYS 31 > -#define SIGUNUSED 31 > - > -#define SIGRTMIN 32 > -#define SIGRTMAX (_NSIG-1) > - > -/* > - * SA_FLAGS values: > - * > - * SA_ONSTACK indicates that a registered stack_t will be used. > - * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the > - * SA_RESTART flag to get restarting signals (which were the default long ago) > - * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. > - * SA_RESETHAND clears the handler when the signal is delivered. > - * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. > - * SA_NODEFER prevents the current signal from being masked in the handler. > - * > - * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single > - * Unix names RESETHAND and NODEFER respectively. > - */ > -#define SA_NOCLDSTOP 0x00000001u > -#define SA_NOCLDWAIT 0x00000002u > -#define SA_SIGINFO 0x00000004u > -#define SA_ONSTACK 0x08000000u > -#define SA_RESTART 0x10000000u > -#define SA_NODEFER 0x40000000u > -#define SA_RESETHAND 0x80000000u > - > -#define SA_NOMASK SA_NODEFER > -#define SA_ONESHOT SA_RESETHAND > -#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ > - > -#define SA_RESTORER 0x04000000 > - > -/* > - * sigaltstack controls > - */ > -#define SS_ONSTACK 1 > -#define SS_DISABLE 2 > - > -#define MINSIGSTKSZ 2048 > -#define SIGSTKSZ 8192 > - > -#include <asm-generic/signal.h> > - > -/* This uses gcc anonymous union support... */ > -struct siginfo; > - > -struct sigaction { > - union { > - __sighandler_t sa_handler; > - void (*sa_sigaction)(int, struct siginfo *, void *); > - }; > - unsigned long sa_flags; > - __sigrestore_t sa_restorer; > - sigset_t sa_mask; > -}; > +#include <linux/signal.h> > > #endifThis compiles, but fails at runtime on i386, because arch/x86/include/asm/signal.h in the kernel does not provide the correct definition of sigset_t needed for klibc: | #ifdef __KERNEL__ | #include <linux/linkage.h> | | /* Most things should be clean enough to redefine this at will, if care | is taken to make libc match. */ | | #define _NSIG 64 | | #ifdef __i386__ | # define _NSIG_BPW 32 | #else | # define _NSIG_BPW 64 | #endif | | #define _NSIG_WORDS (_NSIG / _NSIG_BPW) | | typedef unsigned long old_sigset_t; /* at least 32 bits */ | | typedef struct { | unsigned long sig[_NSIG_WORDS]; | } sigset_t; | | #else | /* Here we must cater to libcs that poke about in kernel headers. */ | | #define NSIG 32 | typedef unsigned long sigset_t; | | #endif /* __KERNEL__ */ This gives sizeof(sigset_t) == 4, which is then rejected with EINVAL by rt_sigprocmask() and other syscalls. The subsequent definition of struct sigaction is also wrong for klibc. Looks like the libc5 crap is not really dead yet... -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://www.zytor.com/pipermail/klibc/attachments/20100511/aea33ad9/attachment.sig>
H. Peter Anvin
2010-May-10 22:31 UTC
[klibc] signal handling broken on i386 (Re: fix i386 build)
On 05/10/2010 01:28 PM, Sergey Vlasov wrote:> > This compiles, but fails at runtime on i386, because > arch/x86/include/asm/signal.h in the kernel does not provide the > correct definition of sigset_t needed for klibc: > > | #ifdef __KERNEL__ > | #include <linux/linkage.h> > | > | /* Most things should be clean enough to redefine this at will, if care > | is taken to make libc match. */ > | > | #define _NSIG 64 > | > | #ifdef __i386__ > | # define _NSIG_BPW 32 > | #else > | # define _NSIG_BPW 64 > | #endif > | > | #define _NSIG_WORDS (_NSIG / _NSIG_BPW) > | > | typedef unsigned long old_sigset_t; /* at least 32 bits */ > | > | typedef struct { > | unsigned long sig[_NSIG_WORDS]; > | } sigset_t; > | > | #else > | /* Here we must cater to libcs that poke about in kernel headers. */ > | > | #define NSIG 32 > | typedef unsigned long sigset_t; > | > | #endif /* __KERNEL__ */ > > This gives sizeof(sigset_t) == 4, which is then rejected with EINVAL > by rt_sigprocmask() and other syscalls. The subsequent definition of > struct sigaction is also wrong for klibc. > > Looks like the libc5 crap is not really dead yet... >The above is, in fact, said libc5 crap. -hpa