gold linker v2.22: Fix constructor handling
authorJohn Marino <dragonflybsd@marino.st>
Tue, 3 Jan 2012 10:50:54 +0000 (11:50 +0100)
committerFran├žois Tigeot <ftigeot@wolfpond.org>
Tue, 3 Jan 2012 17:47:49 +0000 (18:47 +0100)
Starting with gold 2.22, gold looks for contructors in DT_INIT_ARRAY by
default, but gcc defines them in a .ctors section.  Apparently the
presence of crtbegin and crtend with their .init sections are confusing
gold, but not gnu ld.

To combat this, a new option "--no-ctors-in-init-array" was added to
emulate gnu ld behavior of looking for constructors in the .ctors
section provided by gcc.  This commit makes this new option the default
behavior on DragonFly's gold.

Without this modification, a gold-built world is unbootable!

contrib/binutils-2.22/README.DRAGONFLY
contrib/binutils-2.22/gold/options.h

index c01e8df..8416e5b 100644 (file)
@@ -13,4 +13,5 @@ A list of files and directories removed is in README.DELETED
 Local modifications applied to following files:
        bfd/bfdver.h (new)
        gold/options.cc
+       gold/options.h
        ld/ldlex.l
index 768df9c..0cdb274 100644 (file)
@@ -680,9 +680,9 @@ class General_options
              N_("Output cross reference table"),
              N_("Do not output cross reference table"));
 
-  DEFINE_bool(ctors_in_init_array, options::TWO_DASHES, '\0', true,
-             N_("Use DT_INIT_ARRAY for all constructors (default)"),
-             N_("Handle constructors as directed by compiler"));
+  DEFINE_bool(ctors_in_init_array, options::TWO_DASHES, '\0', false,
+             N_("Use DT_INIT_ARRAY for all constructors"),
+             N_("Handle constructors as directed by compiler (default)"));
 
   DEFINE_bool(define_common, options::TWO_DASHES, 'd', false,
               N_("Define common symbols"),