[comp.os.vms] Ada 1.4 and psect_objects

SQKEITH@CSVAX.LIV.AC.UK (12/21/87)

I have a fairly major problem with DEC Ada 1.4's use of the pragma PSECT_OBJECT
when linking to write shareable (installed) images. Basically, they don't work.
Here is the giste:

I have a FORTRAN common block defined as follows in KKH_SHARED.FOR:

INTEGER LAST
CHARACTER CHARS(255)
COMMON /TEST$SHARED_DATA/ LAST,CHARS
END

This is compiled, linked/shareable and installed with /SHARE/WRITEABLE. I also
define a systemwide executive logical name to point to this for activation
purposes. The following units are compiled with Ada:

package SHARED_DATA is
   type BLOCK is record
                   LAST : INTEGER;
                   CHARS : STRING(1..255);
                 end record;

   BUFFER : BLOCK; pragma PSECT_OBJECT(BUFFER,"TEST$SHARED_DATA");

end SHARED_DATA;

with TEXT_IO; use TEXT_IO;
with SHARED_DATA;
procedure COMMON_USER is
begin
  ...
  BUFFER := ( LAST => 0, CHARS => (1..255=>' '));
  ...
end COMMON_USER;

I link this as follows:

$ ACS LINK COMMON_USER SYS$LOGIN:KKH_SHARED/SHARE

On executing COMMON_USER, I receive an access violation (Reason mask=04) when
attempting to perform the above assignment BUFFER := ... etc. A similar
violation is also signalled on any attempt to read BUFFER.

I tried using the installed common block from Fortran, Basic and Pascal using
basically the same form of program as for COMMON_USER and it works perfectly. I
would like to be able to do the same thing from Ada without having to create
and map my own global sections - installed images are much more convenient.

I have checked the obvious things like PSECT sizes and alignment and they
match.

Does anybody have any words of wisdom? Does anybody else use DEC Ada? I can
supply the linker maps if anybody is interested. If all fails then it's time to
brush up on the delights of using $CRMPSC.

Awaiting FTP_Q processes desperately,

Keith Halewood
SQKEITH@UK.AC.LIV.CSVAX