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]

temporary symbol helper functions


Moves some bits out of dwarf2dbg.c so that they can be shared
with dw2gencfi.c.


r~


        * symbols.c (temp_label_name): New.
        (symbol_temp_new, symbol_temp_new_now, symbol_temp_make): New.
        (symbol_set_value_now): New.
        * symbols.h: Prototype them.
        * dwarf2dbg.c: Use them.
        (fake_label_name, symbol_new_now, set_symbol_value_now): Remove.

Index: dwarf2dbg.c
===================================================================
RCS file: /cvs/src/src/gas/dwarf2dbg.c,v
retrieving revision 1.62
diff -c -p -d -r1.62 dwarf2dbg.c
*** dwarf2dbg.c	21 Apr 2003 18:23:25 -0000	1.62
--- dwarf2dbg.c	27 May 2003 15:56:16 -0000
*************** static bfd_boolean loc_directive_seen;
*** 157,165 ****
  /* Current location as indicated by the most recent .loc directive.  */
  static struct dwarf2_line_info current;
  
- /* Fake label name.  */
- static char const fake_label_name[] = ".L0\001";
- 
  /* The size of an address on the target.  */
  static unsigned int sizeof_address;
  
--- 157,162 ----
*************** static void out_two PARAMS ((int));
*** 174,181 ****
  static void out_four PARAMS ((int));
  static void out_abbrev PARAMS ((int, int));
  static void out_uleb128 PARAMS ((addressT));
- static symbolS *symbol_new_now PARAMS ((void));
- static void set_symbol_value_now PARAMS ((symbolS *));
  static offsetT get_frag_fix PARAMS ((fragS *));
  static void out_set_addr PARAMS ((segT, fragS *, addressT));
  static int size_inc_line_addr PARAMS ((int, addressT));
--- 171,176 ----
*************** out_abbrev (name, form)
*** 621,645 ****
    out_uleb128 (form);
  }
  
- /* Create a new fake symbol whose value is the current position.  */
- 
- static symbolS *
- symbol_new_now ()
- {
-   return symbol_new (fake_label_name, now_seg, frag_now_fix (), frag_now);
- }
- 
- /* Set the value of SYM to the current position in the current segment.  */
- 
- static void
- set_symbol_value_now (sym)
-      symbolS *sym;
- {
-   S_SET_SEGMENT (sym, now_seg);
-   S_SET_VALUE (sym, frag_now_fix ());
-   symbol_set_frag (sym, frag_now);
- }
- 
  /* Get the size of a fragment.  */
  
  static offsetT
--- 616,621 ----
*************** out_set_addr (seg, frag, ofs)
*** 676,682 ****
    expressionS expr;
    symbolS *sym;
  
!   sym = symbol_new (fake_label_name, seg, ofs, frag);
  
    out_opcode (DW_LNS_extended_op);
    out_uleb128 (sizeof_address + 1);
--- 652,658 ----
    expressionS expr;
    symbolS *sym;
  
!   sym = symbol_temp_new (seg, ofs, frag);
  
    out_opcode (DW_LNS_extended_op);
    out_uleb128 (sizeof_address + 1);
*************** relax_inc_line_addr (line_delta, seg, to
*** 894,901 ****
    expressionS expr;
    int max_chars;
  
!   to_sym = symbol_new (fake_label_name, seg, to_ofs, to_frag);
!   from_sym = symbol_new (fake_label_name, seg, from_ofs, from_frag);
  
    expr.X_op = O_subtract;
    expr.X_add_symbol = to_sym;
--- 870,877 ----
    expressionS expr;
    int max_chars;
  
!   to_sym = symbol_temp_new (seg, to_ofs, to_frag);
!   from_sym = symbol_temp_new (seg, from_ofs, from_frag);
  
    expr.X_op = O_subtract;
    expr.X_add_symbol = to_sym;
*************** out_debug_line (line_seg)
*** 1124,1132 ****
  
    subseg_set (line_seg, 0);
  
!   line_start = symbol_new_now ();
!   prologue_end = symbol_make (fake_label_name);
!   line_end = symbol_make (fake_label_name);
  
    /* Total length of the information for this compilation unit.  */
    expr.X_op = O_subtract;
--- 1100,1108 ----
  
    subseg_set (line_seg, 0);
  
!   line_start = symbol_temp_new_now ();
!   prologue_end = symbol_temp_make ();
!   line_end = symbol_temp_make ();
  
    /* Total length of the information for this compilation unit.  */
    expr.X_op = O_subtract;
*************** out_debug_line (line_seg)
*** 1188,1200 ****
  
    out_file_list ();
  
!   set_symbol_value_now (prologue_end);
  
    /* For each section, emit a statement program.  */
    for (s = all_segs; s; s = s->next)
      process_entries (s->seg, s->head->head);
  
!   set_symbol_value_now (line_end);
  }
  
  /* Emit data for .debug_aranges.  */
--- 1164,1176 ----
  
    out_file_list ();
  
!   symbol_set_value_now (prologue_end);
  
    /* For each section, emit a statement program.  */
    for (s = all_segs; s; s = s->next)
      process_entries (s->seg, s->head->head);
  
!   symbol_set_value_now (line_end);
  }
  
  /* Emit data for .debug_aranges.  */
*************** out_debug_aranges (aranges_seg, info_seg
*** 1250,1260 ****
        symbolS *beg, *end;
  
        frag = first_frag_for_seg (s->seg);
!       beg = symbol_new (fake_label_name, s->seg, 0, frag);
        s->text_start = beg;
  
        frag = last_frag_for_seg (s->seg);
!       end = symbol_new (fake_label_name, s->seg, get_frag_fix (frag), frag);
        s->text_end = end;
  
        expr.X_op = O_symbol;
--- 1226,1236 ----
        symbolS *beg, *end;
  
        frag = first_frag_for_seg (s->seg);
!       beg = symbol_temp_new (s->seg, 0, frag);
        s->text_start = beg;
  
        frag = last_frag_for_seg (s->seg);
!       end = symbol_temp_new (s->seg, get_frag_fix (frag), frag);
        s->text_end = end;
  
        expr.X_op = O_symbol;
*************** out_debug_info (info_seg, abbrev_seg, li
*** 1322,1329 ****
  
    subseg_set (info_seg, 0);
  
!   info_start = symbol_new_now ();
!   info_end = symbol_make (fake_label_name);
  
    /* Compilation Unit length.  */
    expr.X_op = O_subtract;
--- 1298,1305 ----
  
    subseg_set (info_seg, 0);
  
!   info_start = symbol_temp_new_now ();
!   info_end = symbol_temp_make ();
  
    /* Compilation Unit length.  */
    expr.X_op = O_subtract;
*************** out_debug_info (info_seg, abbrev_seg, li
*** 1421,1427 ****
       dwarf2 draft has no standard code for assembler.  */
    out_two (DW_LANG_Mips_Assembler);
  
!   set_symbol_value_now (info_end);
  }
  
  void
--- 1397,1403 ----
       dwarf2 draft has no standard code for assembler.  */
    out_two (DW_LANG_Mips_Assembler);
  
!   symbol_set_value_now (info_end);
  }
  
  void
Index: symbols.c
===================================================================
RCS file: /cvs/src/src/gas/symbols.c,v
retrieving revision 1.44
diff -c -p -d -r1.44 symbols.c
*** symbols.c	20 May 2003 07:58:06 -0000	1.44
--- symbols.c	27 May 2003 15:56:17 -0000
*************** symbol_make (name)
*** 588,593 ****
--- 588,616 ----
    return (symbolP);
  }
  
+ static const char temp_label_name[] = ".L0\001";
+ 
+ symbolS *
+ symbol_temp_new (seg, ofs, frag)
+      segT seg;
+      valueT ofs;
+      fragS *frag;
+ {
+   return symbol_new (temp_label_name, seg, ofs, frag);
+ }
+ 
+ symbolS *
+ symbol_temp_new_now ()
+ {
+   return symbol_temp_new (now_seg, frag_now_fix (), frag_now);
+ }
+ 
+ symbolS *
+ symbol_temp_make ()
+ {
+   return symbol_make (temp_label_name);
+ }
+ 
  /* Implement symbol table lookup.
     In:	A symbol's name as a string: '\0' can't be part of a symbol name.
     Out:	NULL if the name was not in the symbol table, else the address
*************** symbol_set_value_expression (s, exp)
*** 2059,2064 ****
--- 2082,2098 ----
    if (LOCAL_SYMBOL_CHECK (s))
      s = local_symbol_convert ((struct local_symbol *) s);
    s->sy_value = *exp;
+ }
+ 
+ /* Set the value of SYM to the current position in the current segment.  */
+ 
+ void
+ symbol_set_value_now (sym)
+      symbolS *sym;
+ {
+   S_SET_SEGMENT (sym, now_seg);
+   S_SET_VALUE (sym, frag_now_fix ());
+   symbol_set_frag (sym, frag_now);
  }
  
  /* Set the frag of a symbol.  */
Index: symbols.h
===================================================================
RCS file: /cvs/src/src/gas/symbols.h,v
retrieving revision 1.12
diff -c -p -d -r1.12 symbols.h
*** symbols.h	20 May 2003 07:58:06 -0000	1.12
--- symbols.h	27 May 2003 15:56:17 -0000
*************** symbolS *symbol_create PARAMS ((const ch
*** 59,64 ****
--- 59,68 ----
  				fragS * frag));
  struct local_symbol *local_symbol_make PARAMS ((const char *name, segT section, 
  					 valueT value, fragS * frag));
+ symbolS *symbol_temp_new PARAMS ((segT, valueT, fragS *));
+ symbolS *symbol_temp_new_now PARAMS ((void));
+ symbolS *symbol_temp_make PARAMS ((void));
+ 
  symbolS *colon PARAMS ((const char *sym_name));
  void local_colon PARAMS ((int n));
  void symbol_begin PARAMS ((void));
*************** extern symbolS *symbol_next PARAMS ((sym
*** 172,177 ****
--- 176,182 ----
  extern expressionS *symbol_get_value_expression PARAMS ((symbolS *));
  extern void symbol_set_value_expression PARAMS ((symbolS *,
  						 const expressionS *));
+ extern void symbol_set_value_now PARAMS ((symbolS *));
  extern void symbol_set_frag PARAMS ((symbolS *, fragS *));
  extern fragS *symbol_get_frag PARAMS ((symbolS *));
  extern void symbol_mark_used PARAMS ((symbolS *));


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