(root)/
binutils-2.41/
gas/
debug.c
       1  /* This file is debug.c
       2     Copyright (C) 1987-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of GAS, the GNU Assembler.
       5  
       6     GAS is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     GAS is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with GAS; see the file COPYING.  If not, write to
      18     the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
      19  
      20  /* Routines for debug use only.  */
      21  
      22  #include "as.h"
      23  #include "subsegs.h"
      24  
      25  dmp_frags ()
      26  {
      27    asection *s;
      28    frchainS *chp;
      29    char *p;
      30  
      31    for (s = stdoutput->sections; s; s = s->next)
      32      for (chp = seg_info (s)->frchainP; chp; chp = chp->frch_next)
      33        {
      34  	switch (s)
      35  	  {
      36  	  case SEG_DATA:
      37  	    p = "Data";
      38  	    break;
      39  	  case SEG_TEXT:
      40  	    p = "Text";
      41  	    break;
      42  	  default:
      43  	    p = "???";
      44  	    break;
      45  	  }
      46  	printf ("\nSEGMENT %s %d\n", p, chp->frch_subseg);
      47  	dmp_frag (chp->frch_root, "\t");
      48        }
      49  }
      50  
      51  dmp_frag (fp, indent)
      52       struct frag *fp;
      53       char *indent;
      54  {
      55    for (; fp; fp = fp->fr_next)
      56      {
      57        printf ("%sFRAGMENT @ 0x%x\n", indent, fp);
      58        switch (fp->fr_type)
      59  	{
      60  	case rs_align:
      61  	  printf ("%srs_align(%d)\n", indent, fp->fr_offset);
      62  	  break;
      63  	case rs_fill:
      64  	  printf ("%srs_fill(%d)\n", indent, fp->fr_offset);
      65  	  printf ("%s", indent);
      66  	  var_chars (fp, fp->fr_var + fp->fr_fix);
      67  	  printf ("%s\t repeated %d times,", indent, fp->fr_offset);
      68  	  printf (" fixed length if # chars == 0)\n");
      69  	  break;
      70  	case rs_org:
      71  	  printf ("%srs_org(%d+sym @0x%x)\n", indent,
      72  		  fp->fr_offset, fp->fr_symbol);
      73  	  printf ("%sfill with ", indent);
      74  	  var_chars (fp, 1);
      75  	  printf ("\n");
      76  	  break;
      77  	case rs_machine_dependent:
      78  	  printf ("%smachine_dep\n", indent);
      79  	  break;
      80  	default:
      81  	  printf ("%sunknown type\n", indent);
      82  	  break;
      83  	}
      84        printf ("%saddr=%d(0x%x)\n", indent, fp->fr_address, fp->fr_address);
      85        printf ("%sfr_fix=%d\n", indent, fp->fr_fix);
      86        printf ("%sfr_var=%d\n", indent, fp->fr_var);
      87        printf ("%sfr_offset=%d\n", indent, fp->fr_offset);
      88        printf ("%schars @ 0x%x\n", indent, fp->fr_literal);
      89        printf ("\n");
      90      }
      91  }
      92  
      93  var_chars (fp, n)
      94       struct frag *fp;
      95       int n;
      96  {
      97    unsigned char *p;
      98  
      99    for (p = (unsigned char *) fp->fr_literal; n; n--, p++)
     100      {
     101        printf ("%02x ", *p);
     102      }
     103  }
     104  
     105  /* end of debug.c */