Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Apr 1998 23:48:57 +0100
From:      James Raynard <fhackers@jraynard.demon.co.uk>
To:        rotel@indigo.ie
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   NSIG >= 32 (Was: Re: PR kern/1144)
Message-ID:  <19980413234857.04490@jraynard.demon.co.uk>
In-Reply-To: <199804131949.UAA07048@indigo.ie>; from Niall Smart on Mon, Apr 13, 1998 at 08:49:57PM %2B0000
References:  <fhackers@jraynard.demon.co.uk> <199804131949.UAA07048@indigo.ie>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Apr 13, 1998 at 08:49:57PM +0000, Niall Smart wrote:
> On Apr 13,  4:06pm, James Raynard wrote:
> } Subject: Re: PR kern/1144
> > 
> > The consensus seemed to be that there was no easy way to do it, so
> > we've been ignoring POSIX ever since (in that respect at least) :-)
> 
> Hrm, is this still the `official' position?

Dunno.  Would anyone "official" like to comment? :-)

> > 1. Emacs breaks (albeit an old version - 19.29).  Everything else
> >    I've tried works, including linuxxdoom.
> 
> Do you mean an emacs binary compiled when sigset_t typedef'd to unsigned
> int, or one compiled with sigset_t typedef'd to u_int64_t?

No, this is an emacs binary compiled on my system which has had
sigset_t typedef'd to array of unsigned long for 3-4 months
(which is why some of the following is a little vague - it's a
long time since I visited any of the false trails :-)

It crashes with SIGSEGV somewhere deep in the bowels of the parser;
probably a silly mistake on my part somewhere, but the signal-handling
in Emacs is a bit too opaque for my feeble brain to untangle.

> > 2. I had to add an extra system call osigprocmask for the compat stuff
> >    which does exactly what the old sigprocmask call used to do.  This
> >    makes upgrading to the new code a real pain.
> 
> Why was this necessary?  Are you talking about dealing with code
> that passes an int* instead of a sigset_t*?   Or perhaps you are
> talking about code that has already been compiled with sigset_t
> typedef'd to int?

The sigprocmask libc stub (src/lib/libc/i386/sys/sigprocmask.S) does
some assembler trickery to save a function parameter, which only works
if sigset_t is an integer.  I asked about this on one of the lists,
but didn't get any replies.

The only way I found to get things to work (as in not panic in
totally unrelated parts of the kernel) was to rename sigprocmask
to osigprocmask and let the libc Makefile generate the new
sigprocmask.S, then implement sigprocmask as a "normal" syscall.

This was only a problem with src/lib/libc/compat-43/sigcompat.c.
Unfortunately, there's a lot of code that calls this...

> > Anyone care to help me out?
> 
> I don't have a machine with -current, nor do I have commit priveledges,
> so I don't know if there is anything I can do -- where is the code
> that handles NSIG >= 32 that you have so far?

I can put the patches on my Web page if you (or anyone else for that
matter) would be interested.

James


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980413234857.04490>