![]() |
![]() 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.
|