HP OpenVMS Systemsask the wizard |
The Question is: Is it possible to build an image linked with a VAXC OLB and execute it on a VAX running VMS 5.5-2H4 with DECC RTL installed? We have tried this and have found that global sections mapped by the VAXC - bound application are not aligned properly. We are trying to avoid rebuilding the application with the DECC compiler. The Answer is : VAX C and Compaq (DEC) C are fully compatible, and can be installed coresident, and can operate on the same OpenVMS VAX system. Compaq (DEC) C can be installed on OpenVMS VAX V5.5-2 through V6.0 (inclusive), with the installation of the Compaq (DEC) C run-time library kit provided with the compiler. The Compaq (DEC) C run-time kit is not required on OpenVMS VAX V6.1 and later, nor on OpenVMS Alpha V6.1 and later. The Wizard would strongly encourage the use of Compaq (DEC) C over VAX C, as it is far better at finding latent problems in C source code, and it makes for far easier porting of C code to Compaq (DEC) C on OpenVMS Alpha or to other ANSI C platforms. Compaq (DEC) C also supports a VAX C compatibility mode. As for alignment questions involving installed images, that does not appear to be directly tied to the use of an object library (OLB). The Wizard would recommed the use of shareable images for VAX C or Compaq (DEC) C, over the use of a compiler object library. For information on creating shareable images -- and why you might want to -- please see the pointer to the shareable image cookbook included in the OpenVMS Frequently Asked Questions (FAQ). The initial Compaq (DEC) C compiler command first used when porting many VAX C programs to Compaq (DEC) C is: $ CC/DECC/STANDARD=VAXC/PREFIX=ALL For additional information on using global sections from C, see the global section programming example available at the OpenVMS Ask The Wizard website. The Wizard could infer from the question that the application may be overmapping a program data structure with a global section -- this is similar to a Fortran COMMON, and is not an approach that the Wizard would recommend. For reasons of flexibility and adaptability, and to avoid frequent relinking when constituent shareable images change sizes, the Wizard prefers to use dynamic, run-time, position-independent global section over a link-time position-dependent COMMON -- global sections can be mapped into the next available memory, and the program can control the size of the global section as required. COMMONs are static, and image(s) must be periodically relinked. (Be aware that position independence means that you cannot store virtual addresses in a section, you must store base-relative offsets -- offsets from the base address of the global section -- in any data structures present in the section. This "referencing" and "dereferencing" is required as the global section is position-independent; the section may not be mapped into the same portion of virtual address space in each process accessing it.) When working with commons and particularly with extern externals, also see the /SHARE_GLOBAL and /EXTERN_MODE=COMMON_BLOCK Compaq (DEC) C command qualifiers. Also see the member alignment pragmas and the /MEMBER_ALIGNMENT compiler qualifier. Compaq (DEC) on OpenVMS VAX uses byte alignment, while Compaq (DEC) C on OpenVMS Alpha uses natural alignment. (OpenVMS Alpha is particularly sensitive to memory aligment.) This difference is not usually a problem, save for specific cases such as sharing of data structures between OpenVMS VAX and OpenVMS Alpha systems (eg: network packets or RMS file records), or for OpenVMS Alpha structures that must explicitly be unaligned (eg: the process quota list array on the sys$creprc system service). When the data structure must have a particular member alignment, use the #pragma [no]member_alignment. Compaq (DEC) C also assumes that string literals are not writeable, where some C programs assume these "constants" can be written. To assist in porting this code, see the /ASSUME=WRITABLE_STRING_LITERALS qualifier. For specific information on the "not aligned properly" problem that is being reported, please contact the customer support center -- there is insufficient information on the error and on the application included with the report to provide an answer with any degree of certainty.
|