* coffcode.h, libcoff.c: added new fielded to coff_symbol_struct
authorSteve Chamberlain <sac@cygnus>
Thu, 6 Feb 1992 19:22:03 +0000 (19:22 +0000)
committerSteve Chamberlain <sac@cygnus>
Thu, 6 Feb 1992 19:22:03 +0000 (19:22 +0000)
"done_lineno" so that a symbol which appears twice in the symbol
table only gets it's linenumbers relocated once. Modifed
(coff_write_native_symbol) and (coff_make_empty_symbol) to make

bfd/coffcode.h
bfd/libcoff.h

index 7862f844cfbf799f2680ea7d9804460c4a8389b6..e80370db0a358675630c5ab14fd255fff179c986 100644 (file)
@@ -1593,7 +1593,7 @@ unsigned int written)
 
   alent          *lineno = symbol->lineno;
 
-  if (lineno) {
+  if (lineno && !symbol->done_lineno) {
     unsigned int    count = 0;
     lineno[count].u.offset = written;
     if (native->u.syment.n_numaux) {
@@ -1613,6 +1613,8 @@ unsigned int written)
          symbol->symbol.section->output_offset;
       count++;
     }
+    symbol->done_lineno = true;
+    
     symbol->symbol.section->output_section->moving_line_filepos +=
       count * LINESZ;
   }
@@ -1804,6 +1806,7 @@ bfd            *abfd;
   }                            /* on error */
   new->native = 0;
   new->lineno = (alent *) NULL;
+  new->done_lineno = false;
   new->symbol.the_bfd = abfd;
   return &new->symbol;
 }
@@ -1884,6 +1887,22 @@ DEFUN(coff_print_symbol,(ignore_abfd, filep, symbol, how),
 
        }
        
+      {
+       struct lineno_cache_entry *l = coffsymbol(symbol)->lineno;
+       if (l) 
+       {
+         printf("\n%s :", l->u.sym->name);
+         l++;
+         while (l->line_number) 
+         {
+           printf("\n%4d : %x", 
+                  l->line_number,
+                  l->u.offset);
+           l++;
+           
+         }
+       }
+      }
 
     
 
@@ -3616,7 +3635,7 @@ DEFUN(jmp1,(input_section, symbols, r, shrink),
   return shrink;      
 }
 
-extern boolean 
+static boolean 
 DEFUN(bfd_coff_relax_section,(abfd, i, symbols, seclet),
       bfd *abfd AND
       asection *i AND
@@ -3628,7 +3647,7 @@ DEFUN(bfd_coff_relax_section,(abfd, i, symbols, seclet),
   bfd *input_bfd = i->owner;
   asection *input_section = i;
   int shrink = 0 ;
-  int new = 0;
+  boolean new = false;
   
   bfd_size_type reloc_size = bfd_get_reloc_upper_bound(input_bfd,
                                                       input_section);
@@ -3653,12 +3672,12 @@ DEFUN(bfd_coff_relax_section,(abfd, i, symbols, seclet),
          
        case R_MOVB1:
          shrink = movb1(input_section, symbols, r, shrink);
-         new = 1;
+         new = true;
          
          break;
        case R_JMP1:
          shrink = jmp1(input_section, symbols, r, shrink);
-         new = 1;
+         new = true;
          
          break;
        }
@@ -3683,9 +3702,9 @@ DEFUN(bfd_coff_get_relocated_section_contents,(in_abfd, seclet),
   bfd *input_bfd = seclet->u.indirect.section->owner;
   asection *input_section = seclet->u.indirect.section;
 
-  char *data = malloc(input_section->_raw_size);
-  char *dst = data;
-  char *prev_dst = data;
+  bfd_byte  *data = (bfd_byte *)malloc(input_section->_raw_size);
+  bfd_byte *dst = data;
+  bfd_byte *prev_dst = data;
 
   unsigned int gap = 0;
 
index 94a5664b814073357e2a4ebffe766f8826660451..0eba7a6e47dac4d79899eaf88ee1a38f95585f21 100644 (file)
@@ -21,7 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* Object file tdata; access macros */
 
-#define coff_data(bfd)         ((coff_data_type *) ((bfd)->tdata))
+#define coff_data(bfd)         ((bfd)->tdata.coff_obj_data)
 #define exec_hdr(bfd)          (coff_data(bfd)->hdr)
 #define obj_symbols(bfd)       (coff_data(bfd)->symbols)
 #define        obj_sym_filepos(bfd)    (coff_data(bfd)->sym_filepos)
@@ -75,6 +75,7 @@ typedef struct coff_tdata
 
 /* And more taken from the source .. */
 
+typedef struct coff_ptr_struct 
 {
 
         /* Remembers the offset from the first symbol in the file for
@@ -103,13 +104,13 @@ union {
 
 typedef struct coff_symbol_struct
 {
-    /* The actual symbol which the rest of BFD works with */
-asymbol symbol;
+  /* The actual symbol which the rest of BFD works with */
+  asymbol symbol;
 
-    /* A pointer to the hidden information for this symbol */
-combined_entry_type *native;
-
-    /* A pointer to the linenumber information for this symbol */
-struct lineno_cache_entry *lineno;
+  /* A pointer to the hidden information for this symbol */
+  combined_entry_type *native;
 
+  /* A pointer to the linenumber information for this symbol */
+  struct lineno_cache_entry *lineno;
+  boolean done_lineno;
 } coff_symbol_type;