From: Perry E. M. <pe...@pi...> - 2004-04-08 12:50:48
|
Christophe Rhodes <cs...@ca...> writes: > "Perry E. Metzger" <pe...@pi...> writes: > >> These patches make sbcl come up successfully under NetBSD 2.0 and above. > > I've committed most of this to the NetBSD branch (-r netbsd_branch). > Could you check that that branch builds for you on NetBSD? I checked that my patches built cleanly against a fresh checkout of the head (my tree is not the same as that in the patches...) If you pull up to the head, I'll fix anything that is still broken there promptly -- there won't be a release claiming to work on NetBSD that does not. > There remain one or two things to get done before merging on to HEAD: > firstly, > >> +for NetBSD: >> + NetBSD 2.0 and above are required because of the lack of needed >> + signal APIs in NetBSD 1.6 and earlier. > > Can you enforce this by a uname() check in netbsd_init()? It would be > good to give the user as informative an error message as possible. Actually, the right thing to do is to error out on a particular __NetBSD_Version__ -- I'll do it. >> + /* NetBSD counts mmap()ed space against the process's data size limit, >> + * so yank it up. This might be a nasty thing to do? */ >> + getrlimit (RLIMIT_DATA, &rl); >> + rl.rlim_cur = 1073741824; > > What is this number? I mean apart from 0x40000000... :-) Is it > calculated from somewhere, or just SOMETHING_BIG? I got that code straight from the last guy to play the NetBSD port game. I'm actually unsure about how needed it is, but unfortunately it is hard for me to know given the way my machines are set up... (long story.) >> +#ifdef LISP_FEATURE_SB_THREAD >> static lispobj free_pages_lock=0; >> +#endif > > I haven't merged this (and similar), because I'm fairly sure the right > answer is to define a null version in x86-arch.h for non-threaded > builds, leaving the logic in the main body of the code untouched. I'm not sure about that. I think, among other things, it is less confusing to have a reader see that spin lock code is obviously only in use when needed. However, it isn't my call to make. > If the presence of our spinlock implementation is causing you a > problem on NetBSD, It caused substantial trouble during debugging, and it certainly isn't correct to have it there in a non-threaded version (you end up locking the bus unnecessarily all over the place...) > adding definitions > static inline void get_spinlock(lispobj *word, int value) { > *word = value; } > static inline void get_spinlock(lispobj *word, int value) { > *word = 0; } > or similar, conditional on ! LISP_FEATURE_SB_THREAD, is probably the > way to go. Why the *word = 0? Why not just empty? > >> /* other miscellaneous things */ >> +/* FIXME: NetBSD needs to get fixed here too PEM 2004-03-27 */ >> #if defined(SVR4) || defined(__FreeBSD__) >> F(setpgid) >> F(getpgid) > > What does this comment mean? NetBSD can't just be ifdefed in there because some of what follows has been treated with the __rename trick in the NetBSD sources, but properly speaking NetBSD should be getting treatment like FreeBSD there to make the same calls available. The proper solution isn't obvious and it was a note to me to rototill the way that whole file works to make it work correctly on more platforms. (FYI, it has some serious problems as it stands on many platforms, but that's a long long story...) Perry |