summaryrefslogtreecommitdiff
path: root/os2/Changes
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2001-03-05 13:51:17 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2001-03-05 13:51:17 +0000
commit5ba48348b2bf48a04aedce7107ba7c0939e5b567 (patch)
tree0a1d2d59fe5bbf96045e3d9c028b104337f1d0ba /os2/Changes
parent4194d4900628023d2d8e6a71f5036d1975be36d7 (diff)
downloadperl-5ba48348b2bf48a04aedce7107ba7c0939e5b567.tar.gz
Integrate change #9030 from maintperl into mainline.
Subject: [PATCH 5.6.1] OS/2 cleanup p4raw-link: @9030 on //depot/maint-5.6/perl: 2105755b4e61318e9489b9a118af8e270a8bc735 p4raw-id: //depot/perl@9031 p4raw-branched: from //depot/maint-5.6/perl@9029 'branch in' os2/os2add.sym p4raw-integrated: from //depot/maint-5.6/perl@9029 'copy in' os2/Changes os2/OS2/REXX/REXX.pm os2/OS2/REXX/t/rx_cmprt.t os2/os2.sym (@5902..) os2/Makefile.SHs (@8153..) os2/OS2/REXX/REXX.xs os2/os2ish.h (@8606..) 'merge in' lib/ExtUtils/MM_OS2.pm os2/OS2/REXX/Makefile.PL (@5902..) MANIFEST (@8986..) makedef.pl (@8987..) os2/os2.c (@9016..) lib/ExtUtils/MM_Unix.pm (@9028..)
Diffstat (limited to 'os2/Changes')
-rw-r--r--os2/Changes65
1 files changed, 65 insertions, 0 deletions
diff --git a/os2/Changes b/os2/Changes
index e56b7081ff..e72e0bd2cd 100644
--- a/os2/Changes
+++ b/os2/Changes
@@ -322,3 +322,68 @@ after 5.005_62:
(alas, uppercased - but with /);
t/io/fs.t was failing on HPFS386;
Remove extra ';' from defines for MQ operations.
+
+pre 5.6.1:
+ Resolved: "Bad free()" messages (e.g., from DB_File) with -Zomf build.
+ The reason was: when an extension DLL was linked, the order of
+ libraries was similar to this:
+ f1.obj f2.obj libperl.lib -llibr1 -llibr2
+ (with C RTL implicitly after this). When libperl.lib overrides
+ some C RTL functions, they are correctly resolved when mentioned
+ in f1.obj and f2.obj. However, the resolution for libr1.lib and
+ libr2.lib is implementation-dependent.
+
+ With -Zomf linking the symbols are resolved for libr1.lib and
+ libr2.lib *only if* they reside in .obj-file-sections of libperl.lib
+ which were already "picked up" for symbols in f1.obj f2.obj.
+ However, libperl.lib is an import library for a .DLL, so *each
+ symbol in libperl.lib sits in its own pseudo-section*!
+
+ Corollary: only those symbol from libperl.lib which were already
+ mentioned in f1.obj f2.obj would be used for libr1.lib and
+ libr2.lib. Example: if f1.obj f2.obj do not mention calloc() but
+ libr1.lib and libr2.lib do, then .lib's will get calloc() of C RTL,
+ not one of libperl.lib.
+
+ Solution: create a small duplicate of libperl.lib with overriding
+ symbols only. Put it *after* -llibr1 -llibr2 on the link line.
+ Map strdup() and putenv() to Perl_strdup() and Perl_putenv()
+ inside this library.
+
+ Resolved: rmdir() and mkdir() do not accept trailing slashes.
+ Wrappers are implemented.
+ Resolved: when loading modules, FP mask may be erroneously changed by
+ _DLLInitTerm() (e.g., TCP32IP).
+ Solutions: a) dlopen() saves/restores the FP mask.
+ b) When starting, reset FP mask to a sane value
+ (if the DLL was compile-time linked).
+ New functions in package OS2:
+ unsigned _control87(unsigned new,unsigned mask) # as in EMX
+ unsigned get_control87()
+ # with default values good for handling exception mask:
+ unsigned set_control87_em(new=MCW_EM,mask=MCW_EM)
+ Needed to guard against other situations when the FP mask is
+ stompted upon. Apparently, IBM used a compiler (for some period
+ of time around '95?) which changes FP mask right and left...
+ Resolved: $^X was always uppercased (cosmetic). Solution:
+ use argv[0] if it differs from what the OS returns only in case.
+ Resolved: when creating PM message queues, WinCancelShutdown() was
+ not called even if the application said that it would not serve
+ messages in this queue. Could result in PM refusing to shutdown.
+
+ Solution: resolve WinCancelShutdown at run time, keep the refcount
+ of who is going to serve the queue.
+ Resolved: Perl_Deregister_MQ() segfaulted (pid/tid not initialized).
+ Resolved: FillWinError() would not fetch the error.
+ Solution: resolve WinGetLastError at run time, call it.
+ Resolved: OS2::REXX would ignore arguments given to a Perl function
+ imported into the REXX compartment via REXX_eval_with().
+ Resolved: OS2::REXX would treat arguments given to a Perl function
+ imported into the REXX compartment via _register() as ASCIIZ
+ strings inside of binary strings.
+ Resolved: OS2::REXX did not document _register().
+ Resolved: OS2::REXX would not report the error to REXX if an error
+ condition appeared during a call to Perl function from REXX
+ compartment. As a result, the return string was not initialized.
+ A complete example of a mini-application added to OS2::REXX.
+