Skip to content
  • Alan Modra's avatar
    GNU attribute output on errors · bdb5f07b
    Alan Modra authored
    .gnu.attributes entries from linker input files are merged to the
    output file, the output having the union of compatible input
    attributes.  Incompatible attributes generally cause a linker error
    and no output.  However in some cases only a warning is emitted, and
    one of the incompatible input attributes is passed on to the output.
    
    PowerPC tends to emit warnings rather than errors, and the output
    takes the first input attribute.  For example, if we have two input
    files with Tag_GNU_Power_ABI_FP, the first with a value signifying
    "double-precision hard float, IBM long double", the second with a
    value signifying "double-precision hard float, IEEE long double",
    we'll get a warning about incompatible long double types and the
    output will say "double-precision hard float, IBM long double".
    The output attribute of course isn't correct.  It would be correct to
    specify "IBM and IEEE long double", but we don't have a way to
    represent that currently.  While it would be possible to extend the
    encoding, there isn't much gain in doing so.  A shared library
    providing support for both long double types should link against
    objects using either long double type without warning or error.  That
    is what you'd get if such a shared library had no Tag_GNU_Power_ABI_FP
    attribute.
    
    So this patch provides a way for the backend to omit .gnu.attributes
    tags from the output.
    
    	* elf-bfd.h (ATTR_TYPE_FLAG_ERROR, ATTR_TYPE_HAS_ERROR): Define.
    	* elf-attrs.c (is_default_attr): Handle ATTR_TYPE_HAS_ERROR.
    	* elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): Use
    	ATTR_TYPE_FLAG_INT_VAL.  Set ATTR_TYPE_HAS_ERROR on finding
    	incompatible attribute.
    	(ppc_elf_merge_obj_attributes): Likewise.  Return
    	_bfd_elf_merge_object_attributes result.
    	* elf64-ppc.c (ppc64_elf_merge_private_bfd_data): Return
    	_bfd_elf_merge_object_attributes result.
    
    (cherry picked from commit 8d2c8c3d)
    bdb5f07b
To find the state of this project's repository at the time of any of these versions, check out the tags.