XCOFF C_STSYM test failure on 32-bit host
authorAlan Modra <amodra@gmail.com>
Tue, 14 Dec 2021 10:43:21 +0000 (21:13 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 14 Dec 2021 21:53:10 +0000 (08:23 +1030)
commiteda0ddeb26a117660f3c0f54572053117641c2c3
tree757d6033615d4a4bd0d45bad65083686b5c744e2
parent237f6eac1577223034a3e3436bd270428d097534
XCOFF C_STSYM test failure on 32-bit host

This test was failing here and on another similar symbol:
[  4](sec  1)(fl 0x00)(ty   0)(scl 143) (nx 0) 0x05d1745d11745d21 .bs
where correct output is
[  4](sec  1)(fl 0x00)(ty   0)(scl 143) (nx 0) 0x000000000000000a .bs

The problem is caused by a 32-bit host pointer being sign-extended
when stored into a 64-bit bfd_vma, and then that value not being
trimmed back to 32 bits when used.  The following belt-and-braces
patch fixes both the store and subsequent reads.

* coffcode.h (coff_slurp_symbol_table): Do not sign extend
when storing a host pointer to syment.n_value.
* coffgen.c (coff_get_symbol_info): Cast syment.n_value to a
bfd_hostptr_t before using in arithmetic.
(coff_print_symbol): Likewise.
bfd/coffcode.h
bfd/coffgen.c