include/coff/
authorRichard Sandiford <rdsandiford@googlemail.com>
Sat, 14 Mar 2009 09:34:27 +0000 (09:34 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Sat, 14 Mar 2009 09:34:27 +0000 (09:34 +0000)
commit8602d4fea60dda606ad5e5e01e27f8f841120e15
tree0c063210b9f1e8282b03acd84a1d078a463e97ed
parent5b49f6dc399d611d8d8a10e2e2c922f38e6bb038
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.
46 files changed:
bfd/ChangeLog
bfd/coff-rs6000.c
bfd/coff64-rs6000.c
bfd/coffcode.h
bfd/coffgen.c
bfd/xcofflink.c
gas/ChangeLog
gas/config/tc-ppc.c
include/coff/ChangeLog
include/coff/internal.h
include/coff/xcoff.h
ld/testsuite/ChangeLog
ld/testsuite/ld-powerpc/aix-glink-2-32.dd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2-64.dd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2a.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2a.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2b.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2c.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2c.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-glink-2d.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1-dso.hd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1-dso.nd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1-rel.hd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1-rel.nd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1a.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-1b.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2a.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2a.nd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2a.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2b.nd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2b.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2c.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2c.nd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2c.od [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-2c.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3-32.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3-32.dd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3-64.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3-64.dd [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3a.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3a.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3b.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-weak-3b.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix52.exp