Article 4859 of vmsnet.internals:
Hello fellow Macro32ers,

This list has been too dormant for too long so, here is a little food for
thought.  It concerns the behavior of the OpenVMS Alpha linker and I have
found this to be a bit of a nuisance on more than one occasion.

If you haven't seen this before, the OpenVMS Alpha linker uses the share-
able image SYS$SSISHR.EXE when /DEBUG is specified to supply "feign" sys-
tem service "jackets".  Therefore, if you load the address of some system 
service (say SYS$QIO) into a register, that address will vary and depends
upon the method used to link the image.

Below is a small ditty I've written to demonstrate this behavior.  Test it
out for yourself.

Test 1:

$ MACRO <the-ditty>
$ LINKK <the-ditty>
$ RUN <the-ditty>

Test 2:

$ MACRO <the-ditty>
$ LINKK/DEBUG <the-ditty>
$ RUN/NODEB <the-ditty>


Has anyone found (or is there) a workaround for this so that I can use the
OpenVMS symbolic debugger to step through the program and see the "actual"
values I'd expect to see at run-time when the image has been linked without
/DEBUG?

;++
; Copyright 1997 Brian Schenkenberger and TMESIS	ALL RIGHTS RESERVED.
; If I've ever worked for you then, you're required to obtain permission, in
; writing, to copy or use this software in any form.       (Isn't this sad?)
;--
	.TITLE	"SSI :("		; ALPHA ONLY CODE SNIPPET.
	.IDENT	/V01.00 bjs/		; 

	$PDSCDEF	; OpenVMS Alpha procedure descriptor definitions

	.PSECT	DATA,WRT,NOEXE,5
RES:	.ASCID	/12345678/

	.PSECT	CODE,NOWRT,EXE,5
	.ENTRY	GO,0
	MOVAL	SYS$QIO,R0		; get PDSC address of system service
	PUSHL	R0			; save the address across output rtn

	MOVAB	(SP),R1			; get address of value for formatting
	PUSHAB	RES			; get descriptor address for result
	PUSHL	R1			; push address of value on the stack 
	CALLS	#2,G^OTS$CVT_L_TZ	; convert it to readable hex format

	PUSHAB	RES			; push descriptor address of result
	CALLS	#1,G^LIB$PUT_OUTPUT	; output it so I can see it

	POPL	R0			; recover address of S'S's PDSC 

	MOVL	PDSC$Q_ENTRY(R0),R0	; get address of S'S's transfer rtn
	PUSHL	R0

	MOVAB	(SP),R1			; S.O.S as before, read it above.
	PUSHAB	RES
	PUSHL	R1
	CALLS	#2,G^OTS$CVT_L_TZ

	POPL	R0			; clear the stack

	PUSHAB	RES
	CALLS	#1,G^LIB$PUT_OUTPUT
	RET
	.END	GO


VAXman-                                                     VAXman@TMESIS.COM

Behold, he travaileth with iniquity, and hath conceived mischief, and brought
forth falsehood.   He made a pit, and digged it, and is fallen into the ditch
which he made.   His mischief shall return upon his own head, and his violent
dealing shall come down upon his own pate.               -- Psalms 7:14-16 --