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]

ppc gas negative line number patch


xcoff allow negative line numbers, gas is putting out erroneous
warnings. 

(yes i know this patch contains the last one too)
-- 
Tom Rix 
GCC Engineer
trix@redhat.com
256.704.9201
Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/gas/ChangeLog,v
retrieving revision 1.867
diff -c -p -r1.867 ChangeLog
*** ChangeLog	2001/05/24 08:19:32	1.867
--- ChangeLog	2001/05/24 20:38:53
***************
*** 1,3 ****
--- 1,9 ----
+ 2000-05-24  Tom Rix <trix@redhat.com>
+ 
+ 	* config/obj-coff.c : (add_lineno) xcoff allows negative line
+ 	numbers
+ 	* config/tc-ppc.c (ppc_stabx) : fix generated symbol
+ 	
  2001-05-24  Alan Modra  <amodra@one.net.au>
  
  	* write.c (write_object_file): Set finalize_syms = 1 before
Index: config/obj-coff.c
===================================================================
RCS file: /cvs/src/src/gas/config/obj-coff.c,v
retrieving revision 1.45
diff -c -p -r1.45 obj-coff.c
*** obj-coff.c	2001/05/22 10:23:49	1.45
--- obj-coff.c	2001/05/24 20:38:53
*************** add_lineno (frag, offset, num)
*** 446,457 ****
--- 446,462 ----
      {
        abort ();
      }
+ 
+ #ifndef OBJ_XCOFF
+   /* The native aix assembler accepts negative line number */
+ 
    if (num <= 0)
      {
        /* Zero is used as an end marker in the file.  */
        as_warn (_("Line numbers must be positive integers\n"));
        num = 1;
      }
+ #endif /* OBJ_XCOFF */
    new_line->next = line_nos;
    new_line->frag = frag;
    new_line->l.line_number = num;
Index: config/tc-ppc.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-ppc.c,v
retrieving revision 1.21
diff -c -p -r1.21 tc-ppc.c
*** tc-ppc.c	2001/05/22 10:23:49	1.21
--- tc-ppc.c	2001/05/24 20:38:53
*************** ppc_stabx (ignore)
*** 2845,2853 ****
  
    symbol_get_tc (sym)->output = 1;
  
!   if (S_GET_STORAGE_CLASS (sym) == C_STSYM)
      symbol_get_tc (sym)->within = ppc_current_block;
  
    if (exp.X_op != O_symbol
        || ! S_IS_EXTERNAL (exp.X_add_symbol)
        || S_GET_SEGMENT (exp.X_add_symbol) != bss_section)
--- 2845,2875 ----
  
    symbol_get_tc (sym)->output = 1;
  
!   if (S_GET_STORAGE_CLASS (sym) == C_STSYM) {
! 	  
      symbol_get_tc (sym)->within = ppc_current_block;
  
+     /*
+       In this case :
+       
+       .bs name
+       .stabx	"z",arrays_,133,0
+       .es
+       
+       .comm arrays_,13768,3
+       
+       resolve_symbol_value will copy the exp's "within" into sym's when the
+       offset is 0.  Since this seems to be corner case problem,
+       only do the correction for storage class C_STSYM.  A better solution
+       would be to have the tc	field updated in ppc_symbol_new_hook.
+       
+     */
+ 
+     if (exp.X_op == O_symbol) {
+ 		symbol_get_tc (exp.X_add_symbol)->within = ppc_current_block;
+     }
+   }
+   
    if (exp.X_op != O_symbol
        || ! S_IS_EXTERNAL (exp.X_add_symbol)
        || S_GET_SEGMENT (exp.X_add_symbol) != bss_section)

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