Add --hash-size switch to the linker
This commit is contained in:
parent
8377c19cc4
commit
2d643429de
12 changed files with 131 additions and 22 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2004-05-21 Andy Chittenden <achittenden@bluearc.com>
|
||||||
|
|
||||||
|
* hash.c (bfd_default_hash_table_size): New variable.
|
||||||
|
(bfd_hash_table_init): Use new variable instead of DEFAULT_SIZE.
|
||||||
|
(bfd_hash_set_default_size): New function. Set the default size
|
||||||
|
to a selected prime number close to the argument. Document new
|
||||||
|
function.
|
||||||
|
* bfd-in.h: Add prototype for bfd_hash_set_default_size.
|
||||||
|
* bfd-in2.h: Regenerate.
|
||||||
|
* Makefile.am (hash.lo): Add dependency upon libiberty.h.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
2004-05-21 Mark Kettenis <kettenis@gnu.org>
|
2004-05-21 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
* libaout.h (machine_type): Add M_88K_OPENBSD and M_HPPA_OPENBSD.
|
* libaout.h (machine_type): Add M_88K_OPENBSD and M_HPPA_OPENBSD.
|
||||||
|
|
|
@ -894,7 +894,7 @@ syms.lo: syms.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
|
||||||
$(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
|
$(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
|
||||||
targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h \
|
targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h \
|
||||||
targmatch.h
|
targmatch.h
|
||||||
hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h
|
hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h $(INCDIR)/libiberty.h
|
||||||
linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
|
linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
|
||||||
genlink.h
|
genlink.h
|
||||||
srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
|
srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
|
||||||
|
|
|
@ -1431,7 +1431,7 @@ syms.lo: syms.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \
|
||||||
$(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
|
$(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def
|
||||||
targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h \
|
targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/fnmatch.h \
|
||||||
targmatch.h
|
targmatch.h
|
||||||
hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h
|
hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h $(INCDIR)/libiberty.h
|
||||||
linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
|
linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \
|
||||||
genlink.h
|
genlink.h
|
||||||
srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
|
srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
|
||||||
|
|
|
@ -433,6 +433,11 @@ extern void bfd_hash_traverse
|
||||||
bfd_boolean (*) (struct bfd_hash_entry *, void *),
|
bfd_boolean (*) (struct bfd_hash_entry *, void *),
|
||||||
void *info);
|
void *info);
|
||||||
|
|
||||||
|
/* Allows the default size of a hash table to be configured. New hash
|
||||||
|
tables allocated using bfd_hash_table_init will be created with
|
||||||
|
this size. */
|
||||||
|
extern void bfd_hash_set_default_size (bfd_size_type);
|
||||||
|
|
||||||
#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
|
#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
|
||||||
|
|
||||||
/* User program access to BFD facilities. */
|
/* User program access to BFD facilities. */
|
||||||
|
|
|
@ -440,6 +440,11 @@ extern void bfd_hash_traverse
|
||||||
bfd_boolean (*) (struct bfd_hash_entry *, void *),
|
bfd_boolean (*) (struct bfd_hash_entry *, void *),
|
||||||
void *info);
|
void *info);
|
||||||
|
|
||||||
|
/* Allows the default size of a hash table to be configured. New hash
|
||||||
|
tables allocated using bfd_hash_table_init will be created with
|
||||||
|
this size. */
|
||||||
|
extern void bfd_hash_set_default_size (bfd_size_type);
|
||||||
|
|
||||||
#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
|
#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
|
||||||
|
|
||||||
/* User program access to BFD facilities. */
|
/* User program access to BFD facilities. */
|
||||||
|
|
55
bfd/hash.c
55
bfd/hash.c
|
@ -1,28 +1,29 @@
|
||||||
/* hash.c -- hash table routines for BFD
|
/* hash.c -- hash table routines for BFD
|
||||||
Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003
|
Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Written by Steve Chamberlain <sac@cygnus.com>
|
Written by Steve Chamberlain <sac@cygnus.com>
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
#include "objalloc.h"
|
#include "objalloc.h"
|
||||||
|
#include "libiberty.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SECTION
|
SECTION
|
||||||
|
@ -53,6 +54,7 @@ SECTION
|
||||||
@* Looking Up or Entering a String::
|
@* Looking Up or Entering a String::
|
||||||
@* Traversing a Hash Table::
|
@* Traversing a Hash Table::
|
||||||
@* Deriving a New Hash Table Type::
|
@* Deriving a New Hash Table Type::
|
||||||
|
@* Changing the default Hash Table Size::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
INODE
|
INODE
|
||||||
|
@ -87,6 +89,10 @@ SUBSECTION
|
||||||
been allocated for a hash table. This will not free up the
|
been allocated for a hash table. This will not free up the
|
||||||
<<struct bfd_hash_table>> itself, which you must provide.
|
<<struct bfd_hash_table>> itself, which you must provide.
|
||||||
|
|
||||||
|
@findex bfd_hash_set_default_size
|
||||||
|
Use <<bfd_hash_set_default_size>> to set the default size of
|
||||||
|
hash table to use.
|
||||||
|
|
||||||
INODE
|
INODE
|
||||||
Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables
|
Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables
|
||||||
SUBSECTION
|
SUBSECTION
|
||||||
|
@ -295,7 +301,8 @@ SUBSUBSECTION
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* The default number of entries to use when creating a hash table. */
|
/* The default number of entries to use when creating a hash table. */
|
||||||
#define DEFAULT_SIZE (4051)
|
#define DEFAULT_SIZE 4051
|
||||||
|
static size_t bfd_default_hash_table_size = DEFAULT_SIZE;
|
||||||
|
|
||||||
/* Create a new hash table, given a number of entries. */
|
/* Create a new hash table, given a number of entries. */
|
||||||
|
|
||||||
|
@ -339,7 +346,7 @@ bfd_hash_table_init (table, newfunc)
|
||||||
struct bfd_hash_table *,
|
struct bfd_hash_table *,
|
||||||
const char *));
|
const char *));
|
||||||
{
|
{
|
||||||
return bfd_hash_table_init_n (table, newfunc, DEFAULT_SIZE);
|
return bfd_hash_table_init_n (table, newfunc, bfd_default_hash_table_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free a hash table. */
|
/* Free a hash table. */
|
||||||
|
@ -495,6 +502,24 @@ bfd_hash_traverse (table, func, info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bfd_hash_set_default_size (bfd_size_type hash_size)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
/* Extend this prime list if you want more granularity of hash table size. */
|
||||||
|
static bfd_size_type hash_size_primes[] =
|
||||||
|
{
|
||||||
|
1021, 4051, 8599, 16699
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Work out best prime number near the hash_size. */
|
||||||
|
for (index = 0; index < ARRAY_SIZE (hash_size_primes) - 1; ++index)
|
||||||
|
if (hash_size <= hash_size_primes[index])
|
||||||
|
break;
|
||||||
|
|
||||||
|
bfd_default_hash_table_size = hash_size_primes[index];
|
||||||
|
}
|
||||||
|
|
||||||
/* A few different object file formats (a.out, COFF, ELF) use a string
|
/* A few different object file formats (a.out, COFF, ELF) use a string
|
||||||
table. These functions support adding strings to a string table,
|
table. These functions support adding strings to a string table,
|
||||||
returning the byte offset, and writing out the table.
|
returning the byte offset, and writing out the table.
|
||||||
|
|
15
ld/ChangeLog
15
ld/ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2004-05-21 Andy Chittenden <achittenden@bluearc.com>
|
||||||
|
|
||||||
|
* ld.h (ld_config_type): Add new field: hash_table_size.
|
||||||
|
* ldmain.c: Initialise the new field to zero. If it is non-zero
|
||||||
|
after parsing the linker's command line call
|
||||||
|
bfd_hash_set_default_size.
|
||||||
|
* lexsup.c (option_values): Add OPTION_HASH_SIZE.
|
||||||
|
(ld_options): Add hash-size.
|
||||||
|
(parse_args): Parse --hash-size option. Allow
|
||||||
|
--reduce-memory-overheads to set the default hash table size as
|
||||||
|
well.
|
||||||
|
* ld.texinfo: Document the new switch. Also mention that
|
||||||
|
--reduce-memory-overheads can affect the hash table size.
|
||||||
|
* NEWS: Mention the new feature.
|
||||||
|
|
||||||
2004-05-19 J"orn Rennecke <joern.rennecke@superh.com>
|
2004-05-19 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
* NEWS: Mention new linker map file generation and the
|
* NEWS: Mention new linker map file generation and the
|
||||||
|
|
8
ld/NEWS
8
ld/NEWS
|
@ -1,11 +1,19 @@
|
||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
|
||||||
|
* A new linker command line switch has been added which allows the hash table
|
||||||
|
size to be set to a suitable prime value near to its argument. This switch
|
||||||
|
is --hash-size=<NUMBER>. Also if the switch --reduce-memory-overheads is
|
||||||
|
used, and --hash-size has not been used, then the default value will be set
|
||||||
|
to 1021.
|
||||||
|
|
||||||
* Linker map files are now generated with an O(N) algorithm for finding symbols
|
* Linker map files are now generated with an O(N) algorithm for finding symbols
|
||||||
that are defined in each section. This uses about 40% more memory for
|
that are defined in each section. This uses about 40% more memory for
|
||||||
symbols than the old O(N^2) algorithm. You can use the new
|
symbols than the old O(N^2) algorithm. You can use the new
|
||||||
--reduce-memory-overheads option to select the old algorithm; this option
|
--reduce-memory-overheads option to select the old algorithm; this option
|
||||||
might also be used in the future to select similar tradeoffs.
|
might also be used in the future to select similar tradeoffs.
|
||||||
|
|
||||||
|
Changes in 2.15:
|
||||||
|
|
||||||
* New PE --large-address-aware option to indicate executables support virtual
|
* New PE --large-address-aware option to indicate executables support virtual
|
||||||
addresses greater than 2 gigabytes.
|
addresses greater than 2 gigabytes.
|
||||||
|
|
||||||
|
|
5
ld/ld.h
5
ld/ld.h
|
@ -1,5 +1,5 @@
|
||||||
/* ld.h -- general linker header file
|
/* ld.h -- general linker header file
|
||||||
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002
|
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GLD, the Gnu Linker.
|
This file is part of GLD, the Gnu Linker.
|
||||||
|
@ -241,6 +241,9 @@ typedef struct {
|
||||||
/* If set, only search library directories explicitly selected
|
/* If set, only search library directories explicitly selected
|
||||||
on the command line. */
|
on the command line. */
|
||||||
bfd_boolean only_cmd_line_lib_dirs;
|
bfd_boolean only_cmd_line_lib_dirs;
|
||||||
|
|
||||||
|
/* The size of the hash table to use. */
|
||||||
|
bfd_size_type hash_table_size;
|
||||||
} ld_config_type;
|
} ld_config_type;
|
||||||
|
|
||||||
extern ld_config_type config;
|
extern ld_config_type config;
|
||||||
|
|
|
@ -1734,13 +1734,27 @@ If you specify @option{--disable-new-dtags}, no new dynamic tags will be
|
||||||
created. By default, the new dynamic tags are not created. Note that
|
created. By default, the new dynamic tags are not created. Note that
|
||||||
those options are only available for ELF systems.
|
those options are only available for ELF systems.
|
||||||
|
|
||||||
|
@kindex --hash-size=@var{number}
|
||||||
|
Set the default size of the linker's hash tables to a prime number
|
||||||
|
close to @var{number}. Increasing this value can reduce the length of
|
||||||
|
time it takes the linker to perform its tasks, at the expense of
|
||||||
|
increasing the linker's memory requirements. Similarly reducing this
|
||||||
|
value can reduce the memory requirements at the expense of speed.
|
||||||
|
|
||||||
@kindex --reduce-memory-overheads
|
@kindex --reduce-memory-overheads
|
||||||
@item --reduce-memory-overheads
|
@item --reduce-memory-overheads
|
||||||
This option reduces memory requirements at ld runtime, at the expense of
|
This option reduces memory requirements at ld runtime, at the expense of
|
||||||
linking speed. This was introduced to to select the old O(n^2) algorithm
|
linking speed. This was introduced to to select the old O(n^2) algorithm
|
||||||
for link map file generation, rather than the new O(n) algorithm which uses
|
for link map file generation, rather than the new O(n) algorithm which uses
|
||||||
about 40% more memory for symbol storage. It may be also be used for
|
about 40% more memory for symbol storage.
|
||||||
similar such tradeoffs in the future.
|
|
||||||
|
Another affect of the switch is to set the default hash table size to
|
||||||
|
1021, which again saves memory at the cost of lengthening the linker's
|
||||||
|
run time. This is not done however if the *option{--hash-size} switch
|
||||||
|
has been used.
|
||||||
|
|
||||||
|
The @option{--reduce-memory-overheads} switch may be also be used to
|
||||||
|
enable other tradeoffs in future versions of the linker.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
|
@ -267,6 +267,7 @@ main (int argc, char **argv)
|
||||||
config.has_shared = FALSE;
|
config.has_shared = FALSE;
|
||||||
config.split_by_reloc = (unsigned) -1;
|
config.split_by_reloc = (unsigned) -1;
|
||||||
config.split_by_file = (bfd_size_type) -1;
|
config.split_by_file = (bfd_size_type) -1;
|
||||||
|
config.hash_table_size = 0;
|
||||||
command_line.force_common_definition = FALSE;
|
command_line.force_common_definition = FALSE;
|
||||||
command_line.inhibit_common_definition = FALSE;
|
command_line.inhibit_common_definition = FALSE;
|
||||||
command_line.interpreter = NULL;
|
command_line.interpreter = NULL;
|
||||||
|
@ -344,6 +345,9 @@ main (int argc, char **argv)
|
||||||
lang_has_input_file = FALSE;
|
lang_has_input_file = FALSE;
|
||||||
parse_args (argc, argv);
|
parse_args (argc, argv);
|
||||||
|
|
||||||
|
if (config.hash_table_size != 0)
|
||||||
|
bfd_hash_set_default_size (config.hash_table_size);
|
||||||
|
|
||||||
ldemul_set_symbols ();
|
ldemul_set_symbols ();
|
||||||
|
|
||||||
if (link_info.relocatable)
|
if (link_info.relocatable)
|
||||||
|
|
22
ld/lexsup.c
22
ld/lexsup.c
|
@ -118,6 +118,7 @@ enum option_values
|
||||||
OPTION_FORCE_EXE_SUFFIX,
|
OPTION_FORCE_EXE_SUFFIX,
|
||||||
OPTION_GC_SECTIONS,
|
OPTION_GC_SECTIONS,
|
||||||
OPTION_NO_GC_SECTIONS,
|
OPTION_NO_GC_SECTIONS,
|
||||||
|
OPTION_HASH_SIZE,
|
||||||
OPTION_CHECK_SECTIONS,
|
OPTION_CHECK_SECTIONS,
|
||||||
OPTION_NO_CHECK_SECTIONS,
|
OPTION_NO_CHECK_SECTIONS,
|
||||||
OPTION_NO_UNDEFINED,
|
OPTION_NO_UNDEFINED,
|
||||||
|
@ -328,6 +329,8 @@ static const struct ld_option ld_options[] =
|
||||||
{ {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
|
{ {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
|
||||||
'\0', NULL, N_("Don't remove unused sections (default)"),
|
'\0', NULL, N_("Don't remove unused sections (default)"),
|
||||||
TWO_DASHES },
|
TWO_DASHES },
|
||||||
|
{ {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
|
||||||
|
'\0', NULL, N_("Set default hash table size close to <NUMBER>"), TWO_DASHES },
|
||||||
{ {"help", no_argument, NULL, OPTION_HELP},
|
{ {"help", no_argument, NULL, OPTION_HELP},
|
||||||
'\0', NULL, N_("Print option help"), TWO_DASHES },
|
'\0', NULL, N_("Print option help"), TWO_DASHES },
|
||||||
{ {"init", required_argument, NULL, OPTION_INIT},
|
{ {"init", required_argument, NULL, OPTION_INIT},
|
||||||
|
@ -364,6 +367,8 @@ static const struct ld_option ld_options[] =
|
||||||
'\0', N_("TARGET"), N_("Specify target of output file"), EXACTLY_TWO_DASHES },
|
'\0', N_("TARGET"), N_("Specify target of output file"), EXACTLY_TWO_DASHES },
|
||||||
{ {"qmagic", no_argument, NULL, OPTION_IGNORE},
|
{ {"qmagic", no_argument, NULL, OPTION_IGNORE},
|
||||||
'\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH },
|
'\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH },
|
||||||
|
{ {"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS},
|
||||||
|
'\0', NULL, N_("Reduce memory overheads, possibly taking much longer"), TWO_DASHES },
|
||||||
{ {"relax", no_argument, NULL, OPTION_RELAX},
|
{ {"relax", no_argument, NULL, OPTION_RELAX},
|
||||||
'\0', NULL, N_("Relax branches on certain targets"), TWO_DASHES },
|
'\0', NULL, N_("Relax branches on certain targets"), TWO_DASHES },
|
||||||
{ {"retain-symbols-file", required_argument, NULL,
|
{ {"retain-symbols-file", required_argument, NULL,
|
||||||
|
@ -447,8 +452,6 @@ static const struct ld_option ld_options[] =
|
||||||
'\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"), TWO_DASHES },
|
'\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"), TWO_DASHES },
|
||||||
{ {"wrap", required_argument, NULL, OPTION_WRAP},
|
{ {"wrap", required_argument, NULL, OPTION_WRAP},
|
||||||
'\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
|
'\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
|
||||||
{ {"reduce-memory-overheads", no_argument, NULL, OPTION_REDUCE_MEMORY_OVERHEADS},
|
|
||||||
'\0', NULL, N_("reduce memory overheads, possibly taking much longer"), TWO_DASHES },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define OPTION_COUNT ARRAY_SIZE (ld_options)
|
#define OPTION_COUNT ARRAY_SIZE (ld_options)
|
||||||
|
@ -1224,9 +1227,24 @@ parse_args (unsigned argc, char **argv)
|
||||||
case OPTION_FINI:
|
case OPTION_FINI:
|
||||||
link_info.fini_function = optarg;
|
link_info.fini_function = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPTION_REDUCE_MEMORY_OVERHEADS:
|
case OPTION_REDUCE_MEMORY_OVERHEADS:
|
||||||
command_line.reduce_memory_overheads = TRUE;
|
command_line.reduce_memory_overheads = TRUE;
|
||||||
|
if (config.hash_table_size == 0)
|
||||||
|
config.hash_table_size = 1021;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPTION_HASH_SIZE:
|
||||||
|
{
|
||||||
|
bfd_size_type new_size;
|
||||||
|
|
||||||
|
new_size = strtoul (optarg, NULL, 0);
|
||||||
|
if (new_size)
|
||||||
|
config.hash_table_size = new_size;
|
||||||
|
else
|
||||||
|
einfo (_("%P%X: --hash-size needs a numeric argument\n"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue