This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re[2]: GAS
- From: Stas Kiselev <stas_kiselev at bk dot ru>
- To: Nick Clifton <nickc at redhat dot com>
- Cc: "Zagorodnev, Grigory" <grigory dot zagorodnev at intel dot com>,binutils at sources dot redhat dot com
- Date: Thu, 14 Apr 2005 13:11:25 +0400
- Subject: Re[2]: GAS
- Reply-to: Stas Kiselev <stas_kiselev at bk dot ru>
Hi Nick,
Ok, I have already solved problems with hash. Now I am working with reading .asn
and writing .obj strategies. What can be changed in order to reduce time ?
P.S. What a dataflow of GAS ?
Thank you, Stanislav
>
> Hi Griogry,
>
> > Also there is a little problem with the patch: new command line option
> > has no affect on symbol table and local symbol table hashes because
> > routine parse_args gets called after symbol_begin in "as.c", where these
> > hashes allocated.
>
> Ah - good point. There was also a small problem with non-BFD assemblers
> in that the patch used the bfd_size_type. Therefore I am applying the
> attached patch to fix both of these problems.
>
> I checked - moving the parse_args before the symbol_begin does not
> appear to have any adverse effects.
>
> Cheers
> Nick
>
> gas/ChangeLog
> 2005-04-14 Nick Clifton <nickc@redhat.com>
>
> * as.c (main): Move parse_args before symbol_begin and frag_init
> so that the hash table size can be set before it is used.
> * hash.c: Use an unsigned long type for the size of the hash
> tables.
> * hash.h (set_gas_hash_table_size): Update the prototype.
>
>
>
>
>
> Index: gas/as.c
> ===================================================================
> RCS file: /cvs/src/src/gas/as.c,v
> retrieving revision 1.59
> diff -c -3 -p -r1.59 as.c
> *** gas/as.c 12 Apr 2005 08:42:38 -0000 1.59
> --- gas/as.c 14 Apr 2005 08:56:36 -0000
> *************** the GNU General Public License. This pr
> *** 885,891 ****
>
> case OPTION_HASH_TABLE_SIZE:
> {
> ! bfd_size_type new_size;
>
> new_size = strtoul (optarg, NULL, 0);
> if (new_size)
> --- 885,891 ----
>
> case OPTION_HASH_TABLE_SIZE:
> {
> ! unsigned long new_size;
>
> new_size = strtoul (optarg, NULL, 0);
> if (new_size)
> *************** main (int argc, char ** argv)
> *** 1114,1123 ****
> #endif
>
> PROGRESS (1);
> symbol_begin ();
> frag_init ();
> subsegs_begin ();
> - parse_args (&argc, &argv);
> read_begin ();
> input_scrub_begin ();
> expr_begin ();
> --- 1114,1125 ----
> #endif
>
> PROGRESS (1);
> + /* Call parse_args before any of the init/begin functions
> + so that switches like --hash-size can be honored. */
> + parse_args (&argc, &argv);
> symbol_begin ();
> frag_init ();
> subsegs_begin ();
> read_begin ();
> input_scrub_begin ();
> expr_begin ();
> Index: gas/hash.c
> ===================================================================
> RCS file: /cvs/src/src/gas/hash.c,v
> retrieving revision 1.14
> diff -c -3 -p -r1.14 hash.c
> *** gas/hash.c 12 Apr 2005 08:42:38 -0000 1.14
> --- gas/hash.c 14 Apr 2005 08:56:36 -0000
> *************** struct hash_control {
> *** 73,92 ****
> switch --reduce-memory-overheads, or set to other values by using
> the --hash-size=<NUMBER> switch. */
>
> ! static unsigned int gas_hash_table_size = 65537;
>
> void
> ! set_gas_hash_table_size (unsigned int size)
> {
> gas_hash_table_size = size;
> }
>
> /* FIXME: This function should be amalgmated with bfd/hash.c:bfd_hash_set_default_size(). */
> ! static unsigned int
> get_gas_hash_table_size (void)
> {
> /* Extend this prime list if you want more granularity of hash table size. */
> ! static const unsigned int hash_size_primes[] =
> {
> 1021, 4051, 8599, 16699, 65537
> };
> --- 73,92 ----
> switch --reduce-memory-overheads, or set to other values by using
> the --hash-size=<NUMBER> switch. */
>
> ! static unsigned long gas_hash_table_size = 65537;
>
> void
> ! set_gas_hash_table_size (unsigned long size)
> {
> gas_hash_table_size = size;
> }
>
> /* FIXME: This function should be amalgmated with bfd/hash.c:bfd_hash_set_default_size(). */
> ! static unsigned long
> get_gas_hash_table_size (void)
> {
> /* Extend this prime list if you want more granularity of hash table size. */
> ! static const unsigned long hash_size_primes[] =
> {
> 1021, 4051, 8599, 16699, 65537
> };
> *************** get_gas_hash_table_size (void)
> *** 107,115 ****
> struct hash_control *
> hash_new (void)
> {
> ! unsigned int size;
> struct hash_control *ret;
> - unsigned int alloc;
>
> size = get_gas_hash_table_size ();
>
> --- 107,115 ----
> struct hash_control *
> hash_new (void)
> {
> ! unsigned long size;
> ! unsigned long alloc;
> struct hash_control *ret;
>
> size = get_gas_hash_table_size ();
>
> Index: gas/hash.h
> ===================================================================
> RCS file: /cvs/src/src/gas/hash.h,v
> retrieving revision 1.7
> diff -c -3 -p -r1.7 hash.h
> *** gas/hash.h 12 Apr 2005 08:42:38 -0000 1.7
> --- gas/hash.h 14 Apr 2005 08:56:36 -0000
> *************** struct hash_control;
> *** 26,32 ****
>
> /* Set the size of the hash table used. */
>
> ! void set_gas_hash_table_size (unsigned int);
>
> /* Create a hash table. This return a control block. */
>
> --- 26,32 ----
>
> /* Set the size of the hash table used. */
>
> ! void set_gas_hash_table_size (unsigned long);
>
> /* Create a hash table. This return a control block. */
>
>
>