Page 1 of 1

Compile/Link problem x86

Posted: Fri Dec 30, 2022 11:58 am
by psk
Hi,
I have started to build some code, a c++ library, on VMSx86 and the compilations went ok, more o less, but I get this error when linking the test program:

%ILINK-E-PCRELNOT32BITS, 32-bit PC-relative relocation overflowed
relocation section: .rela.text (section header entry: 3)
relocation type: RELA$K_R_X86_64_PC32
relocation entry: 3996
module: VSTRING
file: VLIBPLF_ROOT:[lib]libvlib.olb;1
%ILINK-E-NOIMGFIL, image file not created

I compile with pointer size 32 but also tried 64.
The vstring.cpp module is quite large, are there any limitations on x86?
Hopefully somebody can give me a hint what it can be.

I'm using cxx (clang) version 10.0.1 on OpenVMS V9.2 update 2.

Thanks in advance
Peter

Re: Compile/Link problem x86

Posted: Sat Dec 31, 2022 9:31 am
by sergey_vorfolomeev
$ LINK /SECT=CODE=P0

Re: Compile/Link problem x86

Posted: Mon Jan 02, 2023 3:36 am
by psk
sergey_vorfolomeev wrote:
Sat Dec 31, 2022 9:31 am
$ LINK /SECT=CODE=P0
Thanks Sergey, but I i think you mean /segm=code=p0 and that helped!
I read the new linker manual but this was not obvious for me. Do you know where I can find more info?
Are there any disadvantages placing the code in p0?

Thanks Peter

Re: Compile/Link problem x86

Posted: Tue Feb 21, 2023 9:46 am
by jreagan
The use of /SEGMENT=CODE=P0 is working around a compiler bug. The compiler accidentally placed data in the wrong PSECT and the linker was unable to reach it. Once the compilers are fixed (I think we've already fixed it), the qualifier will no longer be needed.