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
Compile/Link problem x86
-
- VSI Expert
- Valued Contributor
- Posts: 76
- Joined: Thu Aug 22, 2019 12:17 am
- Reputation: 0
- Status: Offline
Re: Compile/Link problem x86
$ LINK /SECT=CODE=P0
-
Topic author - Member
- Posts: 5
- Joined: Thu Nov 21, 2019 4:48 am
- Reputation: 0
- Location: Sweden
- Status: Offline
Re: Compile/Link problem x86
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
-
- VSI Expert
- Contributor
- Posts: 15
- Joined: Tue Dec 01, 2020 8:40 am
- Reputation: 0
- Status: Offline
Re: Compile/Link problem x86
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.