[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[ID 19991230.007] Building threaded _63 on NeXTstep




This is a bug report for perl from hansmu@xs4all.nl,
generated with the help of perlbug 1.27 running under perl 5.00563.

I've built a threaded _63 on NeXTstep.  The patch below fixes all
but one of the issues I encountered:

1. Threaded malloc.c assumes the existence of two new macros
   MUTEX_LOCK_NOCONTEXT and MUTEX_UNLOCK_NOCONTEXT.  They
   were not provided in the Mach threads section of thread.h

2. The THR macro must contain a cast to struct perl_thread *; there
   was not such cast in the Mach version.

3. dl_next.xs calls form(); that function is now called Perl_form_nocontext().
   There's a macro in embed.h to make this work, but XSLoader disables it
   by adding -DPERL_CORE to its CCFLAGS.
   An alternative fix would be to replace all occurrences of form() in
   dl_next.xs by Perl_form_nocontext().

4. A similar porblem exists in SDBM_File: it tries to call memcmp().
   Unfortunately the memcmp() provided by NeXT is buggy.  Furtunately,
   perl comes with a drop-in replacement called Perl_my_memcmp().
   Unfortunately, the threaded version of Perl_my_memcmp() takes an
   extra argument, so its no longer a valid replacement for memcmp().
   The result is that SDBM_File calls Perl_my_memcmp() with the wrong
   number of arguments.
   I could fix this by writing a function Perl_my_memcmp_nocontext()
   with the same prototype as ANSI memcmp(), but AFAIK Perl_my_memcmp()
   serves no other purpose than as a drop-in replacement for memcmp()
   on platforms where the latter is missing or defective, so I think the
   proper fix is to remove the extra argument.
   I think the same goes for memset(), bcopy() and bzero().

-- HansM

--- thread.h.orig	Wed Oct  6 02:58:56 1999
*** thread.h	Thu Dec 30 00:26:38 1999
@@ -73,7 +73,9 @@
 	} STMT_END
 
 #define MUTEX_LOCK(m)		mutex_lock(*m)
+#define MUTEX_LOCK_NOCONTEXT(m)	mutex_lock(*m)
 #define MUTEX_UNLOCK(m)		mutex_unlock(*m)
+#define MUTEX_UNLOCK_NOCONTEXT(m) mutex_unlock(*m)
 #define MUTEX_DESTROY(m)				\
 	STMT_START {					\
 		mutex_free(*m);				\
@@ -109,7 +111,7 @@
 #define JOIN(t, avp)		(*(avp) = (AV *)cthread_join(t->self))
 
 #define SET_THR(thr)		cthread_set_data(cthread_self(), thr)
-#define THR			cthread_data(cthread_self())
+#define THR			((struct perl_thread *)cthread_data(cthread_self()))
 
 #define INIT_THREADS		cthread_init()
 #define YIELD			cthread_yield()
--- ext/DynaLoader/Makefile.PL.orig	Wed Dec 29 16:39:12 1999
*** ext/DynaLoader/Makefile.PL	Thu Dec 30 19:34:15 1999
@@ -3,7 +3,7 @@
 WriteMakefile(
     NAME => 'DynaLoader',
     LINKTYPE	=> 'static',
-    DEFINE	=> '-DPERL_CORE -DLIBC="$(LIBC)"',
+    DEFINE	=> '-DLIBC="$(LIBC)"',
     MAN3PODS 	=> {}, 	# Pods will be built by installman.
     SKIP	=> [qw(dynamic dynamic_lib dynamic_bs)],
     XSPROTOARG => '-noprototypes', 		# XXX remove later?

---
Site configuration information for perl 5.00563:

Configured by hansm at Wed Dec 29 19:04:12 MET 1999.

Summary of my perl5 (revision 5.0 version 5 subversion 63) configuration:
  Platform:
    osname=next, osvers=4_2, archname=OPENSTEP-Mach-thread
    uname='bombadil '
    config_args='-des -Dcf_email=hansmu@xs4all.nl -Dusethreads -Doptimize=-g -O'
    hint=recommended, useposix=undef, d_sigaction=undef
    usethreads=define useperlio=undef d_sfio=undef
    use64bits=undef usemultiplicity=undef
  Compiler:
    cc='cc', optimize='-g -O', gccversion=NeXT DevKit-based CPP 4.0
    cppflags='-dynamic -fno-common -DUSE_NEXT_CTYPE -DUSE_PERL_SBRK -arch m68k -DDEBUGGING -I/usr/local/include'
    ccflags ='-dynamic -fno-common -DUSE_NEXT_CTYPE -DUSE_PERL_SBRK -arch m68k -arch i386 -DDEBUGGING -I/usr/local/include'
    stdchar='char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=8, usemymalloc=y, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -dynamic -prebind  -arch m68k -arch i386 -L/usr/local/lib'
    libpth=/lib /usr/lib /usr/local/lib
    libs= 
    libc=/NextLibrary/Frameworks/System.framework/System, so=dylib, useshrplib=true, libperl=libperl.5.dylib
  Dynamic Linking:
    dlsrc=dl_next.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags=' -dynamic -bundle -undefined suppress  -arch m68k -arch i386 -L/usr/local/lib'

Locally applied patches:
    

---
@INC for perl 5.00563:
    lib
    /Users/hansm/lib/perl
    /usr/local/OPENSTEP/lib/perl5/5.00563/OPENSTEP-Mach-thread
    /usr/local/OPENSTEP/lib/perl5/5.00563
    /usr/local/OPENSTEP/lib/site_perl/5.00563/OPENSTEP-Mach-thread
    /usr/local/OPENSTEP/lib/site_perl
    .

---
Environment for perl 5.00563:
    DYLD_LIBRARY_PATH=/Users/hansm/src/perl/build/perl-5.006/perl5.005_63t
    HOME=/Users/hansm
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/Users/hansm/bin:/usr/local/bin:/usr/games:/usr/ucb:/bin:/usr/bin:/usr/etc:/Users/hansm/bin/cookies:/LocalApps/Opener.app:.
    PERL5LIB=/Users/hansm/lib/perl
    PERL_BADLANG (unset)
    SHELL=/usr/bin/zsh


[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]