https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61577

--- Comment #162 from dave.anglin at bell dot net ---
On 2020-02-12 10:38 a.m., peter.bisroev at groundlabs dot com wrote:
> The exact HP linker errors from linking cc1, cc1plus and lto1 were (I was
> compiling in parallel):
> --------------------
> ld: The value 0xfffffffffdc6eaf0 does not fit when applying the relocation
> PCREL21B for symbol ".text" at offset 0x102 in section index 51 of file
> libbackend.a[sancov.o]

The value doesn't fit in 21 bits.

The relocations are introduced by the assembler.  You might check if the HP
assembler can assemble sancov.s and see what type of relocations are used.
You can run readelf on .o to see relocations.

It looks like the problem is branches to weak functions.  For example,

        br.call.sptk.many b0 =
_Z16tree_class_checkPK9tree_node15tree_code_classPKciS4_#

        .section       
.gnu.linkonce.t._Z16tree_class_checkPK9tree_node15tree_code_classPKciS4_,"ax",@progbits
        .align 16
        .weak   _Z16tree_class_checkPK9tree_node15tree_code_classPKciS4_#
        .proc _Z16tree_class_checkPK9tree_node15tree_code_classPKciS4_#
_Z16tree_class_checkPK9tree_node15tree_code_classPKciS4_:

Probably, the error arises when the call resolves to an instance that's a long
way away.  I think
we need to find out why 21-bit branch is being used.

Reply via email to