Skip to content
  • Alan Modra's avatar
    Pack reloc_howto_struct · 706704c8
    Alan Modra authored
    This patch uses bitfields in reloc_howto_struct, reducing its size
    from 80 to 40 bytes on 64-bit hosts and from 52 to 32 bytes on 32-bit
    hosts (with a 32-bit bfd_vma).  I've also added a new "negate" field
    rather than making the encoded "size" field do double duty as both
    a size and a flag.
    
    There was just one use of an encoded size of 8, which according to
    bfd_get_reloc_size meant 16 bytes, in vms-alpha.c ALPHA_R_LINKAGE.
    See git commit c3d8e071 adding ALPHA_R_LINKAGE and git commit
    8612a388 decoding size 8 in bfd_get_reloc_size.  Since no other part
    of BFD handles 16 byte relocs, I've removed that encoding and special
    cased the ALPHA_R_LINKAGE size in vms-alpha.c.
    
    	* reloc.c (reloc_howto_type): Typedef.
    	(bfd_symbol): Delete forward declaration.
    	(struct reloc_howto_struct): Add "negate" field.  Make "size",
    	"bitsize", "rightshift", "bitpos", "complain_on_overflow",
    	"pc_relative", "partial_inplace", and "pcrel_offset" bitfields.
    	Rearrange for better packing.  Revise comments.
    	(HOWTO): Map to rearranged reloc_howto_struct.
    	(bfd_get_reloc_size): Delete now unused cases.
    	(read_reloc, write_reloc): Likewise.
    	(apply_reloc, _bfd_relocate_contents): Test howto->negate
    	rather than howto->size < 0 for negated relocation values.
    	* coff-rs6000.c (xcoff_complain_overflow_bitfield_func): Avoid
    	signed/unsigned warning.
    	(xcoff_ppc_relocate_section): Delete "condition is always false"
    	code.
    	* coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise.
    	* cpu-ns32k.c (do_ns32k_reloc): Adjust to suit reloc_howto_struct
    	changes.
    	* vms-alpha.c (_bfd_vms_write_etir, alpha_vms_slurp_relocs): Use
    	size 16 for ALPHA_R_LINKAGE.
    	(alpha_howto_table <ALPHA_R_LINKAGE>): Set encoded size and
    	bitsize to zero.
    	* bfd-in.h (reloc_howto_type): Delete.
    	* bfd-in2.h: Regenerate.
    706704c8