diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 05415534fc7f..dedadf28f3e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-02-26 Richard Henderson + + * config/alpha/alpha.c (alpha_encode_section_info): Examine + MODULE_LOCAL_P; improve commentary. + 2002-02-26 Zack Weinberg * doc/cpp.texi: Clarify documentation of relationship between diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 7710be58b60e..aea7471f1ad2 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1566,6 +1566,7 @@ alpha_encode_section_info (decl) don't know that they exist in this unit of translation. */ if (TREE_PUBLIC (decl)) return; + /* Do not mark functions that are not in .text; otherwise we don't know that they are near enough for a direct branch. */ if (! decl_in_text_section (decl)) @@ -1589,11 +1590,16 @@ alpha_encode_section_info (decl) /* A variable is considered "local" if it is defined in this module. */ - if (DECL_EXTERNAL (decl)) + /* Local binding occurs for any non-default visibility. */ + if (MODULE_LOCAL_P (decl)) + is_local = true; + /* Otherwise, variables defined outside this object may not be local. */ + else if (DECL_EXTERNAL (decl)) is_local = false; /* Linkonce and weak data is never local. */ else if (DECL_ONE_ONLY (decl) || DECL_WEAK (decl)) is_local = false; + /* Static variables are always local. */ else if (! TREE_PUBLIC (decl)) is_local = true; /* If PIC, then assume that any global name can be overridden by