perl5.004 on AIX: Patches
Peter van Heusden [Wed, 11 Jun 1997 00:00:00 +0000 (12:00 +1200)]
I took a further look at the problems which I described in my previous
post, and managed to make a patch for the -Duseperlio problem. [this]
makes both -Duseperlio and -Dshrplib work [...]

Should have spotted this earlier, but hey...

p5p-msgid: Pine.A32.3.93.970519163700.25188A-100000@junior.uwc.ac.za

Makefile.SH
ext/DynaLoader/dl_aix.xs
perl_exp.SH

index ec99d02..70876e1 100755 (executable)
@@ -41,7 +41,14 @@ true)
                ;;
        aix*)
                shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp"
-               shrpldflags="$shrpldflags -b noentry $ldflags $libs $cryptlib"
+               case "$osvers" in
+               3*)
+                       shrpldflags="$shrpldflags -e _nostart $ldflags $libs $cryptlib"
+                       ;;
+               *)
+                       shrpldflags="$shrpldflags -b noentry $ldflags $libs $cryptlib"
+                       ;;
+               esac
                aixinstdir=`pwd | sed 's/\/UU$//'`
                linklibperl="-L $archlibexp/CORE -L $aixinstdir -lperl"
                ;;
index bdf33b2..7466666 100644 (file)
 #include <a.out.h>
 #include <ldfcn.h>
 
+/* If using PerlIO, redefine these macros from <ldfcn.h> */
+#ifdef USE_PERLIO
+#define FSEEK(ldptr,o,p)        PerlIO_seek(IOPTR(ldptr),(p==BEGINNING)?(OFFSET(ldptr)+o):o,p)
+#define FREAD(p,s,n,ldptr)      PerlIO_read(IOPTR(ldptr),p,s*n)
+#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
@@ -389,7 +395,13 @@ static int readExports(ModulePtr mp)
                        ;
                return -1;
        }
+/* This first case is a hack, since it assumes that the 3rd parameter to
+   FREAD is 1. See the redefinition of FREAD above to see how this works. */
+#ifdef USE_PERLIO
+       if (FREAD(ldbuf, sh.s_size, 1, ldp) != sh.s_size) {
+#else
        if (FREAD(ldbuf, sh.s_size, 1, ldp) != 1) {
+#endif
                errvalid++;
                strcpy(errbuf, "readExports: cannot read loader section");
                safefree(ldbuf);
index ef79876..4757c6a 100755 (executable)
@@ -57,6 +57,15 @@ y*)
        ;;
 esac
 
+# 
+# If we use the PerlIO abstraction layer, add its symbols
+#
+
+if [ $useperlio = "define" ]
+then
+       grep '^[A-Za-z]' perlio.sym >> perl.exp
+fi
+
 #
 # Extra globals not included above (including a few that might
 # not actually be defined, but there's no harm in that).