diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-05 13:51:17 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-05 13:51:17 +0000 |
commit | 5ba48348b2bf48a04aedce7107ba7c0939e5b567 (patch) | |
tree | 0a1d2d59fe5bbf96045e3d9c028b104337f1d0ba /os2/Changes | |
parent | 4194d4900628023d2d8e6a71f5036d1975be36d7 (diff) | |
download | perl-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/Changes | 65 |
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. + |