Initial import from FreeBSD RELENG_4:
[dragonfly.git] / gnu / usr.bin / as / debug.c
1 /* This file is debug.c
2
3    Copyright (C) 1987-1992 Free Software Foundation, Inc.
4
5    This file is part of GAS, the GNU Assembler.
6
7    GAS is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GAS is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GAS; see the file COPYING.  If not, write to
19    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
20
21 /* Routines for debug use only.  */
22
23 #ifndef lint
24 static char rcsid[] = "$FreeBSD: src/gnu/usr.bin/as/debug.c,v 1.5 1999/08/27 23:34:14 peter Exp $";
25 #endif
26
27 #include "as.h"
28 #include "subsegs.h"
29
30 dmp_frags()
31 {
32     frchainS *chp;
33     char *p;
34
35     for ( chp=frchain_root; chp; chp = chp->frch_next ){
36         switch ( chp->frch_seg ){
37         case SEG_DATA:
38             p ="Data";
39             break;
40         case SEG_TEXT:
41             p ="Text";
42             break;
43         default:
44             p ="???";
45             break;
46         }
47         printf("\nSEGMENT %s %d\n", p, chp->frch_subseg);
48         dmp_frag( chp->frch_root,"\t");
49     }
50 }
51
52 dmp_frag( fp, indent )
53     struct frag *fp;
54     char *indent;
55 {
56     for ( ; fp; fp = fp->fr_next ){
57         printf("%sFRAGMENT @ 0x%x\n", indent, fp);
58         switch( fp->fr_type ){
59         case rs_align:
60             printf("%srs_align(%d)\n",indent, fp->fr_offset);
61             break;
62         case rs_fill:
63             printf("%srs_fill(%d)\n",indent, fp->fr_offset);
64             printf("%s", indent);
65             var_chars( fp, fp->fr_var + fp->fr_fix );
66             printf("%s\t repeated %d times,",
67                    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         printf("%02x ", *p );
101     }
102 }
103
104 /* end of debug.c */