looping in alpha_vms_slurp_relocs
authorAlan Modra <amodra@gmail.com>
Mon, 19 Sep 2022 01:07:57 +0000 (10:37 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 20 Sep 2022 23:36:21 +0000 (09:06 +0930)
commit8c8fa33c20ec0be7bfcaf7e1b605d37dca63733f
treed08701e022320f92cd10bebda85a6dad6b21a4d5
parent7f99cbd91fcc8167bf0c3be369573df9052e5324
looping in alpha_vms_slurp_relocs

The direct cause for the looping was failing to test for error return
from _bfd_vms_get_object_record inside a while(1) loop.  Fix that.
Also record status of first alpha_vms_slurp_relocs call and return
that for all subsequent calls.  (The object format has one set of
relocation records for all sections.)  If the first call fails, all
others should too.

* vms-alpha.c (struct vms_private_data_struct): Make reloc_done
a tri-state int.
(alpha_vms_slurp_relocs): Set reloc_done to 1 on success, -1 on
failure.  Return that status on subsequent calls.  Check
_bfd_vms_get_object_record return status.
(alpha_vms_get_reloc_upper_bound): Return status from
alpha_vms_slurp_relocs.
(alpha_vms_write_exec): Exclude sections with contents NULL due
to previous errors from layout, and don't try to write them.
bfd/vms-alpha.c