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>