[16/21] Add AIX weak support
Nick Clifton
nickc@redhat.com
Fri Mar 13 15:17:00 GMT 2009
Hi Richard ,
> include/coff/
> * internal.h (C_AIX_WEAKEXT): New macro.
> (C_WEAKEXT): Use the GNU definition in the generic part of the file,
> and conditionally reset it to C_AIX_WEAKEXT in the XCOFF part of
> the file.
> (CSECT_SYM_P): New macro.
> * xcoff.h (L_WEAK): Define.
> (EXTERN_SYM_P): New macro.
>
> bfd/
> * coffcode.h (coff_pointerize_aux_hook): Update CSECT_SYM_P to
> check whether a symbol has csect information.
> (coff_print_aux): Likewise.
> * coff-rs6000.c (_bfd_xcoff_swap_aux_in): Handle auxillary csect
> information for C_AIX_WEAKEXT too.
> (_bfd_xcoff_swap_aux_out): Likewise.
> (xcoff_reloc_type_br): Handle defweak symbols too.
> * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Handle auxillary csect
> information for C_AIX_WEAKEXT too.
> (_bfd_xcoff64_swap_aux_out): Likewise.
> (xcoff64_reloc_type_br): Handle defweak symbols too.
> * coffgen.c (coff_print_symbol): Handle auxillary function
> information for C_AIX_WEAKEXT too.
> * xcofflink.c (_bfd_xcoff_canonicalize_dynamic_symtab): Set BSF_WEAK
> instead of BSF_GLOBAL if the L_WEAK flag is set.
> (xcoff_dynamic_definition_p): New function.
> (xcoff_link_add_dynamic_symbols): Use it to decide whether ldsym
> defines h. Don't change h if ldsym isn't the definition. Otherwise,
> always take the symbol class from the ldsym. Use weak bfd symbol
> types for weak ldsyms.
> (xcoff_link_add_symbols): Use CSECT_SYM_P and EXTERN_SYM_P.
> Fix the check for whether a definition is from a shared object.
> Allow redefinitions of weak symbols.
> (xcoff_link_check_ar_symbols): Use EXTERN_SYM_P.
> (xcoff_keep_symbol_p): Likewise.
> (bfd_xcoff_size_dynamic_sections): Use CSECT_SYM_P.
> (xcoff_link_input_bfd): Use CSECT_SYM_P and EXTERN_SYM_P.
> Add .loader entries for C_AIX_WEAKEXT as well as C_EXT symbols,
> but mark them as L_WEAK.
> (xcoff_write_global_symbol): Treat weak symbols as C_AIX_WEAKEXT
> instead of C_EXT if C_AIX_WEAKEXT == C_WEAKEXT.
>
> gas/
> * config/tc-ppc.c (ppc_frob_symbol): Add csect information for
> C_AIX_WEAKEXT too.
>
> ld/testsuite/
> * ld-powerpc/aix-glink-2a.s, ld-powerpc/aix-glink-2a.ex,
> ld-powerpc/aix-glink-2b.s, ld-powerpc/aix-glink-2c.s,
> ld-powerpc/aix-glink-2c.ex, ld-powerpc/aix-glink-2d.s,
> ld-powerpc/aix-glink-2-32.dd, ld-powerpc/aix-glink-2-64.dd,
> ld-powerpc/aix-weak-1a.s, ld-powerpc/aix-weak-1b.s,
> ld-powerpc/aix-weak-1-rel.hd, ld-powerpc/aix-weak-1-rel.nd,
> ld-powerpc/aix-weak-1-dso.hd, ld-powerpc/aix-weak-1-dso.nd,
> ld-powerpc/aix-weak-1-dso.dnd, ld-powerpc/aix-weak-1.ex,
> ld-powerpc/aix-weak-2a.s, ld-powerpc/aix-weak-2a.ex,
> ld-powerpc/aix-weak-2a.nd, ld-powerpc/aix-weak-2b.s,
> ld-powerpc/aix-weak-2b.nd, ld-powerpc/aix-weak-2c.s,
> ld-powerpc/aix-weak-2c.ex, ld-powerpc/aix-weak-2c.nd,
> ld-powerpc/aix-weak-2c.od, ld-powerpc/aix-weak-3a.s,
> ld-powerpc/aix-weak-3a.ex, ld-powerpc/aix-weak-3b.s,
> ld-powerpc/aix-weak-3b.ex, ld-powerpc/aix-weak-3-32.d,
> ld-powerpc/aix-weak-3-32.dd, ld-powerpc/aix-weak-3-64.d,
> ld-powerpc/aix-weak-3-64.dd: New tests.
> * ld-powerpc/aix52.exp: Run them. Replace tmp/aix-* with
> tmp/aix64-* in 64-bit ld options.
Approved - please apply.
Cheers
Nick
More information about the Binutils
mailing list