gas: add visibility support using GNU syntax on XCOFF

CHIGOT, CLEMENT clement.chigot@atos.net
Thu Jan 13 08:07:26 GMT 2022


Hi Alan,

Yes both are fine.
However, how are you building binutils on AIX ? By default,
reading NULL is possible on AIX that's why it didn't trigger any
segfault in my build.

Thanks,
Clément
________________________________
From: Alan Modra <amodra@gmail.com>
Sent: Thursday, January 13, 2022 7:25 AM
To: binutils@sourceware.org <binutils@sourceware.org>
Cc: CHIGOT, CLEMENT <clement.chigot@atos.net>
Subject: Re: gas: add visibility support using GNU syntax on XCOFF

Caution! External email. Do not open attachments or click links, unless this email comes from a known sender and you know the content is safe.

>From 1ffce3f87dc6e62d49b5aaa0bc29c6d4cfbc6db6 Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@gmail.com>
Date: Thu, 13 Jan 2022 15:42:13 +1030
Subject:

tc-ppc.c: In function 'ppc_comm':
tc-ppc.c:4560:40: error: 'visibility' may be used uninitialized in this function [-Werror=maybe-uninitialized]

With that fixed we hit lots of segfaults in the ld testsuite.  I'm
assuming we leave SYM_V_MASK bits alone if there is no corresponding
symbol in the global hash table.  Clement, please fix this if I got
that wrong.

        PR 22085
bfd/
        * xcofflink.c (xcoff_link_input_bfd): Don't segfault on NULL
        sym_hash.
gas/
        * config/tc-ppc.c (ppc_comm): Init visibility.

diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 6e994720f6d..70d371e4aed 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -4615,8 +4615,11 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo,
             }

           /* Update visibility.  */
-         isym.n_type &= ~SYM_V_MASK;
-         isym.n_type |= (*sym_hash)->visibility;
+         if (*sym_hash)
+           {
+             isym.n_type &= ~SYM_V_MASK;
+             isym.n_type |= (*sym_hash)->visibility;
+           }

           /* Output the symbol.  */
           bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym);
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index ac10772a61e..054f9c72161 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -4380,7 +4380,7 @@ ppc_comm (int lcomm)
   symbolS *lcomm_sym = NULL;
   symbolS *sym;
   char *pfrag;
-  unsigned short visibility;
+  unsigned short visibility = 0;
   struct ppc_xcoff_section *section;

   endc = get_symbol_name (&name);

--
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list