Sujet : Re: Fun trick
De : arne (at) *nospam* vajhoej.dk (Arne Vajhøj)
Groupes : comp.os.vmsDate : 08. Jan 2025, 20:36:13
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vlmk3d$2u2t1$1@dont-email.me>
References : 1 2
User-Agent : Mozilla Thunderbird
On 1/8/2025 12:37 PM, John Reagan wrote:
On 1/7/2025 8:58 PM, Arne Vajhøj wrote:
During some troubleshooting over at VSI forum hb told me that
running a shareable image will execute LIB$INITIALIZE
functions.
>
That made me write this:
...
Pascal has an [INITIALIZE] attribute that you can put on the PROCEDURE CHECK and the compiler should do the contribution to the LIB$INITIALIZE PSECT.
And you should include LIB$INITIALIZE (the code module, not the data PSECT) from STARLET when linking. The x86 linker will do that for you, but the Alpha and Itanium linkers do not.
Zweite Sehr Verbesserte Ausgabe:
$ type lib.pas
[inherit('sys$library:pascal$lib_routines', 'sys$library:starlet')]
module lib(input, output);
[initialize]
procedure check;
var
imgnam : varying [1024] of char;
begin
lib$getjpi(item_code := jpi$_imagname, resultant_string := imgnam.body, resultant_length := imgnam.length);
if index(imgnam, ']libshr.EXE') > 0 then begin
writeln('This is a shareable image to link against not run');
$exit(ss$_normal);
end;
end;
[global]
procedure say;
begin
writeln('Hi');
end;
end.
$ type prg.pas
program prg(input,output);
[external]
procedure say; external;
begin
say;
end.
$ pas lib
$ link/share=libshr lib + sys$library:starlet/lib/incl=lib$initialize + sys$input/opt
SYMBOL_VECTOR=(say=PROCEDURE)
$
$ define/nolog libshr sys$disk:[]libshr
$ pas prg
$ link prg + sys$input/opt
libshr/share
$
$ run prg
Hi
$ run libshr
This is a shareable image to link against not run
Arne