Print this page
10346 ld(1) should not reduce symbol visibility of COMDAT symbols when producing relocatable objects

@@ -1011,11 +1011,11 @@
                  * Only needed symbols are copied to the output symbol table.
                  */
                 if (sdp->sd_ref == REF_DYN_SEEN)
                         continue;
 
-                if (SYM_IS_HIDDEN(sdp) && (flags & FLG_OF_PROCRED))
+                if (ld_sym_reducable(ofl, sdp))
                         local = 1;
                 else
                         local = 0;
 
                 if (local || (ofl->ofl_hashbkts == 0)) {

@@ -1222,11 +1222,11 @@
                  * If this symbol has been marked as being reduced to local
                  * scope then it will have to be placed in the scoped portion
                  * of the .symtab.  Retain the appropriate index for use in
                  * version symbol indexing and relocation.
                  */
-                if (SYM_IS_HIDDEN(sdp) && (flags & FLG_OF_PROCRED)) {
+                if (ld_sym_reducable(ofl, sdp)) {
                         local = 1;
                         if (!(sdp->sd_flags & FLG_SY_ELIM) && !dynsym)
                                 sdp->sd_symndx = scopesym_ndx;
                         else
                                 sdp->sd_symndx = 0;

@@ -1887,11 +1887,11 @@
                  * If the symbol definition has been scoped then assign it to
                  * be local, otherwise if it's from a shared object then we need
                  * to maintain the binding of the original reference.
                  */
                 if (SYM_IS_HIDDEN(sdp)) {
-                        if (flags & FLG_OF_PROCRED)
+                        if (ld_sym_reducable(ofl, sdp))
                                 bind = STB_LOCAL;
                         else
                                 bind = STB_WEAK;
                 } else if ((sdp->sd_ref == REF_DYN_NEED) &&
                     (sdp->sd_flags & FLG_SY_GLOBREF))