@@ -240,26 +240,12 @@ static void kill_dominated_stores(pseudo_t pseudo, struct instruction *insn,
} END_FOR_EACH_PTR(parent);
}
-static void promote_symbol(struct entrypoint *ep, struct symbol *sym)
+
+static unsigned long externaly_visible(struct symbol *sym, unsigned long mod)
{
- pseudo_t pseudo;
+ pseudo_t pseudo = sym->pseudo;
struct pseudo_user *pu;
- unsigned long mod;
- int all;
- /* Never used as a symbol? */
- pseudo = sym->pseudo;
- if (!pseudo)
- return;
-
- mod = sym->ctype.modifiers;
-
- /* We don't do coverage analysis of volatiles.. */
- if (mod & MOD_VOLATILE)
- return;
-
- /* ..and symbols with external visibility need more care */
- mod = mod & (MOD_NONLOCAL|MOD_STATIC|MOD_ADDRESSABLE);
if (mod)
goto external_visibility;
@@ -288,6 +274,31 @@ static void promote_symbol(struct entrypoint *ep, struct symbol *sym)
} END_FOR_EACH_PTR(pu);
external_visibility:
+ return mod;
+}
+
+static void promote_symbol(struct entrypoint *ep, struct symbol *sym)
+{
+ pseudo_t pseudo;
+ struct pseudo_user *pu;
+ unsigned long mod;
+ int all;
+
+ /* Never used as a symbol? */
+ pseudo = sym->pseudo;
+ if (!pseudo)
+ return;
+
+ mod = sym->ctype.modifiers;
+
+ /* We don't do coverage analysis of volatiles.. */
+ if (mod & MOD_VOLATILE)
+ return;
+
+ /* ..and symbols with external visibility need more care */
+ mod = mod & (MOD_NONLOCAL|MOD_STATIC|MOD_ADDRESSABLE);
+ mod = externaly_visible(sym, mod);
+
all = 1;
FOR_EACH_PTR_REVERSE(pseudo->users, pu) {
struct instruction *insn = pu->insn;