gold: Add -Bno-symbolic
authorFangrui Song <maskray@google.com>
Fri, 14 May 2021 22:51:16 +0000 (15:51 -0700)
committerFangrui Song <maskray@google.com>
Fri, 14 May 2021 22:51:17 +0000 (15:51 -0700)
gold/
    PR 27834
    * options.h (General_options): Make -Bsymbolic and
    -Bsymbolic-functions special and adjust the help messages. Add
    enum Bsymbolic_kind and -Bno-symbolic.
    * options.cc (General_options): Define parse_Bno_symbolic,
    parse_Bsymbolic_functions, and parse_Bsymbolic.

gold/ChangeLog
gold/options.cc
gold/options.h

index 82dae337bb369b68f9e2d6c4cd9931fcd194d804..c68f282e9bc9723371c09aee5a9541b6913c5e14 100644 (file)
@@ -1,3 +1,12 @@
+2021-05-04  Fangrui Song  <maskray@google.com>
+
+       PR 27834
+       * options.h (General_options): Make -Bsymbolic and
+       -Bsymbolic-functions special and adjust the help messages. Add
+       enum Bsymbolic_kind and -Bno-symbolic.
+       * options.cc (General_options): Define parse_Bno_symbolic,
+       parse_Bsymbolic_functions, and parse_Bsymbolic.
+
 2021-03-30  Alan Modra  <amodra@gmail.com>
 
        PR gold/27625
index fdf0a174797773abc1a046c56f5ec99bd412aeba..1818e5dc3456d5aed2d3a243ba37d540934f8e45 100644 (file)
@@ -340,6 +340,27 @@ General_options::parse_V(const char*, const char*, Command_line*)
     printf("   %s\n", *p);
 }
 
+void
+General_options::parse_Bno_symbolic(const char*, const char*,
+                                   Command_line*)
+{
+  this->bsymbolic_ = BSYMBOLIC_NONE;
+}
+
+void
+General_options::parse_Bsymbolic_functions(const char*, const char*,
+                                          Command_line*)
+{
+  this->bsymbolic_ = BSYMBOLIC_FUNCTIONS;
+}
+
+void
+General_options::parse_Bsymbolic(const char*, const char*,
+                                Command_line*)
+{
+  this->bsymbolic_ = BSYMBOLIC_ALL;
+}
+
 void
 General_options::parse_defsym(const char*, const char* arg,
                              Command_line* cmdline)
index 927e0734bba433d7a76a237c1d3bd38621fb4809..757ebf18fecfa45dd16affc29c816c6975e07b60 100644 (file)
@@ -747,11 +747,20 @@ class General_options
   DEFINE_bool(Bshareable, options::ONE_DASH, '\0', false,
              N_("Generate shared library (alias for -G/-shared)"), NULL);
 
-  DEFINE_bool(Bsymbolic, options::ONE_DASH, '\0', false,
-             N_("Bind defined symbols locally"), NULL);
+  DEFINE_special (Bno_symbolic, options::ONE_DASH, '\0',
+                 N_ ("Don't bind default visibility defined symbols locally "
+                     "for -shared (default)"),
+                 NULL);
 
-  DEFINE_bool(Bsymbolic_functions, options::ONE_DASH, '\0', false,
-             N_("Bind defined function symbols locally"), NULL);
+  DEFINE_special (Bsymbolic_functions, options::ONE_DASH, '\0',
+                 N_ ("Bind default visibility defined function symbols "
+                     "locally for -shared"),
+                 NULL);
+
+  DEFINE_special (
+      Bsymbolic, options::ONE_DASH, '\0',
+      N_ ("Bind default visibility defined symbols locally for -shared"),
+      NULL);
 
   // c
 
@@ -1740,6 +1749,21 @@ class General_options
   endianness() const
   { return this->endianness_; }
 
+  enum Bsymbolic_kind
+  {
+    BSYMBOLIC_NONE,
+    BSYMBOLIC_FUNCTIONS,
+    BSYMBOLIC_ALL,
+  };
+
+  bool
+  Bsymbolic() const
+  { return this->bsymbolic_ == BSYMBOLIC_ALL; }
+
+  bool
+  Bsymbolic_functions() const
+  { return this->bsymbolic_ == BSYMBOLIC_FUNCTIONS; }
+
   bool
   discard_all() const
   { return this->discard_locals_ == DISCARD_ALL; }
@@ -1873,6 +1897,8 @@ class General_options
   void
   copy_from_posdep_options(const Position_dependent_options&);
 
+  // Whether we bind default visibility defined symbols locally for -shared.
+  Bsymbolic_kind bsymbolic_;
   // Whether we printed version information.
   bool printed_version_;
   // Whether to mark the stack as executable.