Hi,

sorry for not answering sooner.  The suggested patch seems to work
find with the development branch of Perl, and I believe Sarathy
will apply the patch also to the maintenance branch.

On Wed, Feb 21, 2001 at 09:32:04PM +0100, Jens-Uwe Mager wrote:
> On Fri, Feb 16, 2001 at 05:44:34PM +0100, [EMAIL PROTECTED] wrote:
> > On Fri, 16 Feb 2001 [EMAIL PROTECTED] wrote:
> > 
> > > Hi Jarkko,
> > >
> > > > > I'll try to do one or two more builds. I'd really like to try it with
> > > > > Apache's mod_perl and mod_embed, these really didn't work at all with
> > > > > perl-5.6.0, but I'm not sure I'll find the time.
> > 
> > [AIX-4.3.2, IBM's C compiler, Apache apxs shared modules]
> > 
> > I tried to get mod_perl-1.25 (an Apache/perl module that's
> > supposed to let you use perl to implement script-based apache modules)
> > working with perl-5.6.1-trial2, and failed. I can get mod_perl
> > working with perl-5.5.3, but I never succeeded with perl-5.6.0.
> > 
> > With perl-5.6.1-trial2, the mod-perl initialisation is successful, but I
> > get a segmentation fault as soon as I try to access the perl script
> > (test.pl or test.perl).
> 
> A short while ago the Apache distribution did change over to the native
> dlopen library if the AIX version 4.3 and above. For previous versions
> the dlopen emulation layer is still used. Perl does always use the
> emulation, which produces a conflict if Apache uses the native one in
> the modperl case. I attach a patch below that changes the perl
> distribution to also use the native AIX dlopen on AIX 4.3 and above as
> in the Apache case.
> 
> For getting some more involved modperl modules like Embperl to work we
> probably need to change the modperl.exp file to include the magic "#! ."
> instead of simply "#!" at the beginning, this signals the native dlopen
> to import symbols from the main program. The patch already does that in
> makedef.pl for the perl.exp file, but only on AIX 4.3 and above because
> the older AIX linkers do strange things if this option is used.
> 
> -- 
> Jens-Uwe Mager
> 
> HELIOS Software GmbH
> Steinriede 3
> 30827 Garbsen
> Germany
> 
> Phone:                +49 5131 709320
> FAX:          +49 5131 709325
> Internet:     [EMAIL PROTECTED]

> --- perl-5.6.1-TRIAL2/ext/DynaLoader/dl_aix.xs.orig   Wed Feb 21 19:45:18 2001
> +++ perl-5.6.1-TRIAL2/ext/DynaLoader/dl_aix.xs        Wed Feb 21 21:16:53 2001
> @@ -14,6 +14,21 @@
>  #define PERLIO_NOT_STDIO 0
>  
>  /*
> + * On AIX 4.3 and above the emulation layer is not needed any more, and
> + * indeed if perl uses its emulation and perl is linked into apache
> + * which is supposed to use the native dlopen conflicts arise.
> + * Jens-Uwe Mager [EMAIL PROTECTED]
> + */
> +#ifdef USE_NATIVE_DLOPEN
> +
> +#include "EXTERN.h"
> +#include "perl.h"
> +#include "XSUB.h"
> +#include <dlfcn.h>
> +
> +#else
> +
> +/*
>   * @(#)dlfcn.c       1.5 revision of 93/02/14  20:14:17
>   * This is an unpublished work copyright (c) 1992 Helios Software GmbH
>   * 3000 Hannover 1, Germany
> @@ -89,6 +104,13 @@
>  # define FREAD(p,s,n,ldptr)  fread(p,s,n,IOPTR(ldptr))
>  #endif
>  
> +#ifndef RTLD_LAZY
> +# define RTLD_LAZY 0
> +#endif
> +#ifndef RTLD_GLOBAL
> +# define RTLD_GLOBAL 0
> +#endif
> +
>  /*
>   * We simulate dlopen() et al. through a call to load. Because AIX has
>   * no call to find an exported symbol we read the loader section of the
> @@ -627,6 +649,7 @@
>       safefree(buf);
>       return ret;
>  }
> +#endif /* USE_NATIVE_DLOPEN */
>  
>  /* dl_dlopen.xs
>   * 
> @@ -672,7 +695,7 @@
>       DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", 
>filename,flags));
>       if (flags & 0x01)
>           Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while 
>loading %s",filename);
> -     RETVAL = dlopen(filename, 1) ;
> +     RETVAL = dlopen(filename, RTLD_GLOBAL|RTLD_LAZY) ;
>       DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL));
>       ST(0) = sv_newmortal() ;
>       if (RETVAL == NULL)
> --- perl-5.6.1-TRIAL2/hints/aix.sh.orig       Wed Feb 21 19:39:30 2001
> +++ perl-5.6.1-TRIAL2/hints/aix.sh    Wed Feb 21 19:45:00 2001
> @@ -55,9 +55,11 @@
>  case "$osvers" in
>     3.*|4.1.*|4.2.*)
>        usenm='undef'
> +      usenativedlopen='false'
>        ;;
>     *)
>        usenm='true'
> +      usenativedlopen='true'
>        ;;
>  esac
>  
> @@ -405,20 +407,25 @@
>  esac
>  EOCBU
>  
> -# If the C++ libraries, libC and libC_r, are available we will prefer them
> -# over the vanilla libc, because the libC contain loadAndInit() and
> -# terminateAndUnload() which work correctly with C++ statics while libc
> -# load() and unload() do not.  See ext/DynaLoader/dl_aix.xs.
> -# The C-to-C_r switch is done by usethreads.cbu, if needed.
> -if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
> -    # Cify libswanted.
> -    set `echo X "$libswanted "| sed -e 's/ c / C c /'`
> -    shift
> -    libswanted="$*"
> -    # Cify lddlflags.
> -    set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
> -    shift
> -    lddlflags="$*"
> +if test $usenativedlopen = 'true'
> +then
> +        ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
> +else
> +    # If the C++ libraries, libC and libC_r, are available we will prefer them
> +    # over the vanilla libc, because the libC contain loadAndInit() and
> +    # terminateAndUnload() which work correctly with C++ statics while libc
> +    # load() and unload() do not.  See ext/DynaLoader/dl_aix.xs.
> +    # The C-to-C_r switch is done by usethreads.cbu, if needed.
> +    if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then
> +     # Cify libswanted.
> +     set `echo X "$libswanted "| sed -e 's/ c / C c /'`
> +     shift
> +     libswanted="$*"
> +     # Cify lddlflags.
> +     set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'`
> +     shift
> +     lddlflags="$*"
> +    fi
>  fi
>  
>  # EOF
> --- perl-5.6.1-TRIAL2/makedef.pl.orig Wed Feb 21 19:06:38 2001
> +++ perl-5.6.1-TRIAL2/makedef.pl      Wed Feb 21 19:06:42 2001
> @@ -165,7 +165,15 @@
>  ---EOP---
>  }
>  elsif ($PLATFORM eq 'aix') {
> -    print "#!\n";
> +    $OSVER = `uname -v`;
> +    chop $OSVER;
> +    $OSREL = `uname -r`;
> +    chop $OSREL;
> +    if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) {
> +     print "#! .\n";
> +    } else {
> +     print "#!\n";
> +    }
>  }
>  
>  my %skip;


-- 
$jhi++; # http://www.iki.fi/jhi/
        # There is this special biologist word we use for 'stable'.
        # It is 'dead'. -- Jack Cohen

Reply via email to