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: GAS


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]