gas: add visibility support for XCOFF
authorClément Chigot <clement.chigot@atos.net>
Tue, 16 Nov 2021 13:02:16 +0000 (14:02 +0100)
committerClément Chigot <clement.chigot@atos.net>
Wed, 12 Jan 2022 08:08:11 +0000 (09:08 +0100)
commitadd588a8ef53a5f77f2abda08a5de643923c4cce
treef5b85c033c265d175ec30c4de2d7568ac9751f8e
parentc4f5871457222f2c4a99e662dfa16b7c662f750a
gas: add visibility support for XCOFF

XCOFF assembly defines the visibility using an additional argument
on several pseudo-ops: .globl, .weak, .extern and .comm.
This implies that .globl and .weak syntax is different than the
usual GNU syntax. But we want to provide compatibility with AIX
assembler, especially because GCC is generating the visibility
using this XCOFF syntax.

PR 22085

bfd/ChangeLog:

        * coffcode.h (coff_write_object_contents): Change XCOFF header
        vstamp field to 2.
        * coffgen.c (coff_print_symbol): Increase the size for n_type.

gas/ChangeLog:

        * config/tc-ppc.c (ppc_xcoff_get_visibility): New function.
        (ppc_globl): New function.
        (ppc_weak): New function.
        (ppc_comm): Add visibility field support.
        (ppc_extern): Likewise.
        * testsuite/gas/all/cofftag.d: Adjust to new n_type size
        providing by objdump.
        * testsuite/gas/ppc/test1xcoff32.d: Likewise.
        * testsuite/gas/ppc/aix.exp: Add new tests.
        * testsuite/gas/ppc/xcoff-visibility-1-32.d: New test.
        * testsuite/gas/ppc/xcoff-visibility-1-64.d: New test.
        * testsuite/gas/ppc/xcoff-visibility-1.s: New test.

include/ChangeLog:

        * coff/internal.h (SYM_V_INTERNAL, SYM_V_HIDDEN,
        SYM_V_PROTECTED, SYM_V_EXPORTED, SYM_V_MASK): New defines.
        * coff/xcoff.h (struct xcoff_link_hash_entry): Add visibility
        field.

ld/ChangeLog:

        * testsuite/ld-pe/pr19803.d: Adjust to new n_type size
        providing by objdump.
12 files changed:
bfd/coffcode.h
bfd/coffgen.c
gas/config/tc-ppc.c
gas/testsuite/gas/all/cofftag.d
gas/testsuite/gas/ppc/aix.exp
gas/testsuite/gas/ppc/test1xcoff32.d
gas/testsuite/gas/ppc/xcoff-visibility-1-32.d [new file with mode: 0644]
gas/testsuite/gas/ppc/xcoff-visibility-1-64.d [new file with mode: 0644]
gas/testsuite/gas/ppc/xcoff-visibility-1.s [new file with mode: 0644]
include/coff/internal.h
include/coff/xcoff.h
ld/testsuite/ld-pe/pr19803.d