| /* This file is debug.c | |
| Copyright (C) 1987-2025 Free Software Foundation, Inc. | |
| This file is part of GAS, the GNU Assembler. | |
| GAS is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation; either version 3, or (at your option) | |
| any later version. | |
| GAS is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with GAS; see the file COPYING. If not, write to | |
| the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ | |
| /* Routines for debug use only. */ | |
| #include "as.h" | |
| #include "subsegs.h" | |
| void | |
| dmp_frags (void) | |
| { | |
| asection *s; | |
| frchainS *chp; | |
| char *p; | |
| for (s = stdoutput->sections; s; s = s->next) | |
| for (chp = seg_info (s)->frchainP; chp; chp = chp->frch_next) | |
| { | |
| switch (s) | |
| { | |
| case SEG_DATA: | |
| p = "Data"; | |
| break; | |
| case SEG_TEXT: | |
| p = "Text"; | |
| break; | |
| default: | |
| p = "???"; | |
| break; | |
| } | |
| printf ("\nSEGMENT %s %d\n", p, chp->frch_subseg); | |
| dmp_frag (chp->frch_root, "\t"); | |
| } | |
| } | |
| void | |
| dmp_frag (struct frag *fp, char *indent) | |
| { | |
| for (; fp; fp = fp->fr_next) | |
| { | |
| printf ("%sFRAGMENT @ 0x%x\n", indent, fp); | |
| switch (fp->fr_type) | |
| { | |
| case rs_align: | |
| printf ("%srs_align(%d)\n", indent, fp->fr_offset); | |
| break; | |
| case rs_fill: | |
| printf ("%srs_fill(%d)\n", indent, fp->fr_offset); | |
| printf ("%s", indent); | |
| var_chars (fp, fp->fr_var + fp->fr_fix); | |
| printf ("%s\t repeated %d times,", indent, fp->fr_offset); | |
| printf (" fixed length if # chars == 0)\n"); | |
| break; | |
| case rs_org: | |
| printf ("%srs_org(%d+sym @0x%x)\n", indent, | |
| fp->fr_offset, fp->fr_symbol); | |
| printf ("%sfill with ", indent); | |
| var_chars (fp, 1); | |
| printf ("\n"); | |
| break; | |
| case rs_machine_dependent: | |
| printf ("%smachine_dep\n", indent); | |
| break; | |
| default: | |
| printf ("%sunknown type\n", indent); | |
| break; | |
| } | |
| printf ("%saddr=%d(0x%x)\n", indent, fp->fr_address, fp->fr_address); | |
| printf ("%sfr_fix=%d\n", indent, fp->fr_fix); | |
| printf ("%sfr_var=%d\n", indent, fp->fr_var); | |
| printf ("%sfr_offset=%d\n", indent, fp->fr_offset); | |
| printf ("%schars @ 0x%x\n", indent, fp->fr_literal); | |
| printf ("\n"); | |
| } | |
| } | |
| void | |
| var_chars (struct frag *fp, int n) | |
| { | |
| unsigned char *p; | |
| for (p = (unsigned char *) fp->fr_literal; n; n--, p++) | |
| { | |
| printf ("%02x ", *p); | |
| } | |
| } | |
| /* end of debug.c */ |