This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re[2]: GAS


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.  */
>   
> 
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]