HP OpenVMS Systemsask the wizard |
The Question is: We have a VAX MACRO program that we'd like to port over to an Alpha. Unfortunately, we don't know anything about this program, besides the fact that we need to be able to compile it on the Alpha. The program references a file named SYS$SYSTEM:SYS.STB in the directive .link 'sys$system:sys.stb'/se which does not appear to exist on the Alpha, and we think this is why our program will not compile. The compiler spits out messages such as %AMAC-E-DATINCODE and %AMAC-E-STORCODLAB when the program is compiled on the Alpha, but compiles fine on the VAX. The Answer is :
Prior to porting this code, first determine if there are system
services or library routines that provide equivilent capabilities.
More than a few similar routines were implemented before similar
OpenVMS routines were available, or were implemented for various
(effectively unnecessary) reasons.
SYS.STB indicates the code is linked against the OpenVMS VAX kernel,
and is likely version-dependent code. Code linked against SYS.STB
often accesses various internal data structures or routines within
OpenVMS, and these may require changes when moving to OpenVMS Alpha.
Documentation on porting Macro32 code is available in the OpenVMS
manual set -- there is a manual on this topic.
From HELP/MESSAGE:
DATINCODE, data in code stream
Facility: AMAC, MACRO-32 Compiler for OpenVMS Alpha
Explanation: Data was found in the code stream. This condition is not
allowed on OpenVMS Alpha systems.
User Action: For implicit JSB parameters, pass the parameter value in a
register. If any values are larger than a longword, put them
in another program section (psect) and explicitly pass its
address.
For data contiguous with code in the code stream, rewrite the
code so that the data is in a data program section.
STORCODLAB, stored code labels must be declared entry points in
routine 'routine-descriptor'
Facility: AMAC, MACRO-32 Compiler for OpenVMS Alpha
Explanation: An instruction such as MOVAx or PUSHAx that is used to store
the address of a code label is not declared as an entry
point.
User Action: Add the appropriate entry declaration, either .JSB_ENTRY, or
.JSB32_ENTRY, or .CALL_ENTRY.
|