Support special always-defined symbols for targets.
[platform/upstream/binutils.git] / gold / i386.cc
index dcbb839..9b90c79 100644 (file)
@@ -84,6 +84,11 @@ class Target_i386 : public Sized_target<32, false>
   uint64_t
   do_dynsym_value(const Symbol*) const;
 
+  // Return whether SYM is always defined.
+  bool
+  do_is_always_defined(Symbol* sym) const
+  { return strcmp(sym->name(), "___tls_get_addr") == 0; }
+
   // Relocate a section.
   void
   relocate_section(const Relocate_info<32, false>*,
@@ -1046,9 +1051,10 @@ Target_i386::Scan::global(const General_options& options,
             if (!gsym->final_value_is_known())
               {
                 Reloc_section* rel_dyn = target->rel_dyn_section(layout);
-                if (gsym->is_preemptible())
-                    rel_dyn->add_global(gsym, elfcpp::R_386_GLOB_DAT, got,
-                                        gsym->got_offset());
+                if (gsym->is_from_dynobj()
+                   || gsym->is_preemptible())
+                 rel_dyn->add_global(gsym, elfcpp::R_386_GLOB_DAT, got,
+                                     gsym->got_offset());
                 else
                   {
                     rel_dyn->add_local(object, 0, elfcpp::R_386_RELATIVE,