summaryrefslogtreecommitdiff
path: root/binutils/objdump.c
diff options
context:
space:
mode:
authorTimothy Wall <twall@alum.mit.edu>2000-02-03 18:12:55 +0000
committerTimothy Wall <twall@alum.mit.edu>2000-02-03 18:12:55 +0000
commit3f8b77574a3b670316366084c4066e9f5f2d890b (patch)
tree9af773ccff3f09dc3b7813dfa81c2c0137447579 /binutils/objdump.c
parent392c52aeadb5d1c017849e6cb65beffb351a3593 (diff)
downloadbinutils-redhat-3f8b77574a3b670316366084c4066e9f5f2d890b.tar.gz
octets vs bytes changes for binutils
Diffstat (limited to 'binutils/objdump.c')
-rw-r--r--binutils/objdump.c211
1 files changed, 111 insertions, 100 deletions
diff --git a/binutils/objdump.c b/binutils/objdump.c
index f2baff21bf..97dcc8c0e6 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -337,10 +337,11 @@ dump_section_header (abfd, section, ignored)
PTR ignored ATTRIBUTE_UNUSED;
{
char *comma = "";
+ int opb = bfd_octets_per_byte (abfd);
printf ("%3d %-13s %08lx ", section->index,
bfd_get_section_name (abfd, section),
- (unsigned long) bfd_section_size (abfd, section));
+ (unsigned long) bfd_section_size (abfd, section) / opb);
printf_vma (bfd_get_section_vma (abfd, section));
printf (" ");
printf_vma (section->lma);
@@ -739,6 +740,7 @@ find_symbol_for_address (abfd, sec, vma, require_sec, place)
long min = 0;
long max = sorted_symcount;
long thisplace;
+ int opb = bfd_octets_per_byte (abfd);
if (sorted_symcount < 1)
return NULL;
@@ -786,7 +788,7 @@ find_symbol_for_address (abfd, sec, vma, require_sec, place)
|| ((abfd->flags & HAS_RELOC) != 0
&& vma >= bfd_get_section_vma (abfd, sec)
&& vma < (bfd_get_section_vma (abfd, sec)
- + bfd_section_size (abfd, sec)))))
+ + bfd_section_size (abfd, sec) / opb))))
{
long i;
@@ -1010,10 +1012,10 @@ skip_to_line (p, line, show)
listing. */
static void
-show_line (abfd, section, off)
+show_line (abfd, section, addr_offset)
bfd *abfd;
asection *section;
- bfd_vma off;
+ bfd_vma addr_offset;
{
CONST char *filename;
CONST char *functionname;
@@ -1022,7 +1024,7 @@ show_line (abfd, section, off)
if (! with_line_numbers && ! with_source_code)
return;
- if (! bfd_find_nearest_line (abfd, section, syms, off, &filename,
+ if (! bfd_find_nearest_line (abfd, section, syms, addr_offset, &filename,
&functionname, &line))
return;
@@ -1231,31 +1233,33 @@ objdump_sprintf (va_alist)
/* Disassemble some data in memory between given values. */
static void
-disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
+disassemble_bytes (info, disassemble_fn, insns, data,
+ start_offset, stop_offset, relppp,
relppend)
struct disassemble_info *info;
disassembler_ftype disassemble_fn;
boolean insns;
bfd_byte *data;
- bfd_vma start;
- bfd_vma stop;
+ bfd_vma start_offset;
+ bfd_vma stop_offset;
arelent ***relppp;
arelent **relppend;
{
struct objdump_disasm_info *aux;
asection *section;
- int bytes_per_line;
+ int octets_per_line;
boolean done_dot;
int skip_addr_chars;
- bfd_vma i;
+ bfd_vma addr_offset;
+ int opb = info->octets_per_byte;
aux = (struct objdump_disasm_info *) info->application_data;
section = aux->sec;
if (insns)
- bytes_per_line = 4;
+ octets_per_line = 4;
else
- bytes_per_line = 16;
+ octets_per_line = 16;
/* Figure out how many characters to skip at the start of an
address, to make the disassembly look nicer. We discard leading
@@ -1267,8 +1271,8 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
char buf[30];
char *s;
- sprintf_vma (buf,
- section->vma + bfd_section_size (section->owner, section));
+ sprintf_vma (buf, section->vma +
+ bfd_section_size (section->owner, section) / opb);
s = buf;
while (s[0] == '0' && s[1] == '0' && s[2] == '0' && s[3] == '0'
&& s[4] == '0')
@@ -1281,34 +1285,35 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
info->insn_info_valid = 0;
done_dot = false;
- i = start;
- while (i < stop)
+ addr_offset = start_offset;
+ while (addr_offset < stop_offset)
{
bfd_vma z;
- int bytes = 0;
+ int octets = 0;
boolean need_nl = false;
- /* If we see more than SKIP_ZEROES bytes of zeroes, we just
+ /* If we see more than SKIP_ZEROES octets of zeroes, we just
print `...'. */
- for (z = i; z < stop; z++)
+ for (z = addr_offset * opb; z < stop_offset * opb; z++)
if (data[z] != 0)
break;
if (! disassemble_zeroes
&& (info->insn_info_valid == 0
|| info->branch_delay_insns == 0)
- && (z - i >= SKIP_ZEROES
- || (z == stop && z - i < SKIP_ZEROES_AT_END)))
+ && (z - addr_offset * opb >= SKIP_ZEROES
+ || (z == stop_offset * opb &&
+ z - addr_offset * opb < SKIP_ZEROES_AT_END)))
{
printf ("\t...\n");
- /* If there are more nonzero bytes to follow, we only skip
+ /* If there are more nonzero octets to follow, we only skip
zeroes in multiples of 4, to try to avoid running over
the start of an instruction which happens to start with
zero. */
- if (z != stop)
- z = i + ((z - i) &~ 3);
+ if (z != stop_offset * opb)
+ z = addr_offset * opb + ((z - addr_offset * opb) &~ 3);
- bytes = z - i;
+ octets = z - addr_offset * opb;
}
else
{
@@ -1320,13 +1325,13 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
done_dot = false;
if (with_line_numbers || with_source_code)
- show_line (aux->abfd, section, i);
+ show_line (aux->abfd, section, addr_offset);
if (! prefix_addresses)
{
char *s;
- sprintf_vma (buf, section->vma + i);
+ sprintf_vma (buf, section->vma + addr_offset);
for (s = buf + skip_addr_chars; *s == '0'; s++)
*s = ' ';
if (*s == '\0')
@@ -1336,7 +1341,7 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
else
{
aux->require_sec = true;
- objdump_print_address (section->vma + i, info);
+ objdump_print_address (section->vma + addr_offset, info);
aux->require_sec = false;
putchar (' ');
}
@@ -1351,21 +1356,21 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
info->bytes_per_line = 0;
info->bytes_per_chunk = 0;
- /* FIXME: This is wrong. It tests the number of bytes
+ /* FIXME: This is wrong. It tests the number of octets
in the last instruction, not the current one. */
if (*relppp < relppend
- && (**relppp)->address >= i
- && (**relppp)->address < i + bytes)
+ && (**relppp)->address >= addr_offset
+ && (**relppp)->address < addr_offset + octets / opb)
info->flags = INSN_HAS_RELOC;
else
info->flags = 0;
- bytes = (*disassemble_fn) (section->vma + i, info);
+ octets = (*disassemble_fn) (section->vma + addr_offset, info);
info->fprintf_func = (fprintf_ftype) fprintf;
info->stream = stdout;
if (info->bytes_per_line != 0)
- bytes_per_line = info->bytes_per_line;
- if (bytes < 0)
+ octets_per_line = info->bytes_per_line;
+ if (octets < 0)
{
if (sfile.current != sfile.buffer)
printf ("%s\n", sfile.buffer);
@@ -1377,18 +1382,18 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
{
bfd_vma j;
- bytes = bytes_per_line;
- if (i + bytes > stop)
- bytes = stop - i;
+ octets = octets_per_line;
+ if (addr_offset + octets / opb > stop_offset)
+ octets = (stop_offset - addr_offset) * opb;
- for (j = i; j < i + bytes; ++j)
+ for (j = addr_offset * opb; j < addr_offset * opb + octets; ++j)
{
if (isprint (data[j]))
- buf[j - i] = data[j];
+ buf[j - addr_offset * opb] = data[j];
else
- buf[j - i] = '.';
+ buf[j - addr_offset * opb] = '.';
}
- buf[j - i] = '\0';
+ buf[j - addr_offset * opb] = '\0';
}
if (prefix_addresses
@@ -1398,17 +1403,17 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
bfd_vma j;
/* If ! prefix_addresses and ! wide_output, we print
- bytes_per_line bytes per line. */
- pb = bytes;
- if (pb > bytes_per_line && ! prefix_addresses && ! wide_output)
- pb = bytes_per_line;
+ octets_per_line octets per line. */
+ pb = octets;
+ if (pb > octets_per_line && ! prefix_addresses && ! wide_output)
+ pb = octets_per_line;
if (info->bytes_per_chunk)
bpc = info->bytes_per_chunk;
else
bpc = 1;
- for (j = i; j < i + pb; j += bpc)
+ for (j = addr_offset * opb; j < addr_offset * opb + pb; j += bpc)
{
int k;
if (bpc > 1 && info->display_endian == BFD_ENDIAN_LITTLE)
@@ -1425,7 +1430,7 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
}
}
- for (; pb < bytes_per_line; pb += bpc)
+ for (; pb < octets_per_line; pb += bpc)
{
int k;
@@ -1453,25 +1458,25 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
? show_raw_insn > 0
: show_raw_insn >= 0)
{
- while (pb < bytes)
+ while (pb < octets)
{
bfd_vma j;
char *s;
putchar ('\n');
- j = i + pb;
+ j = addr_offset * opb + pb;
- sprintf_vma (buf, section->vma + j);
+ sprintf_vma (buf, section->vma + j / opb);
for (s = buf + skip_addr_chars; *s == '0'; s++)
*s = ' ';
if (*s == '\0')
*--s = '0';
printf ("%s:\t", buf + skip_addr_chars);
- pb += bytes_per_line;
- if (pb > bytes)
- pb = bytes;
- for (; j < i + pb; j += bpc)
+ pb += octets_per_line;
+ if (pb > octets)
+ pb = octets;
+ for (; j < addr_offset * opb + pb; j += bpc)
{
int k;
@@ -1501,8 +1506,8 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
&& (section->flags & SEC_RELOC) != 0)
{
while ((*relppp) < relppend
- && ((**relppp)->address >= (bfd_vma) i
- && (**relppp)->address < (bfd_vma) i + bytes))
+ && ((**relppp)->address >= (bfd_vma) addr_offset
+ && (**relppp)->address < (bfd_vma) addr_offset + octets / opb))
{
arelent *q;
@@ -1553,7 +1558,7 @@ disassemble_bytes (info, disassemble_fn, insns, data, start, stop, relppp,
if (need_nl)
printf ("\n");
- i += bytes;
+ addr_offset += octets / opb;
}
}
@@ -1563,11 +1568,12 @@ static void
disassemble_data (abfd)
bfd *abfd;
{
- long i;
+ long addr_offset;
disassembler_ftype disassemble_fn;
struct disassemble_info disasm_info;
struct objdump_disasm_info aux;
asection *section;
+ int opb = bfd_octets_per_byte (abfd);
print_files = NULL;
prev_functionname = NULL;
@@ -1589,6 +1595,7 @@ disassemble_data (abfd)
aux.require_sec = false;
disasm_info.print_address_func = objdump_print_address;
disasm_info.symbol_at_address_func = objdump_symbol_at_address;
+ disasm_info.octets_per_byte = opb;
if (machine != (char *) NULL)
{
@@ -1646,7 +1653,7 @@ disassemble_data (abfd)
arelent **relbuf = NULL;
arelent **relpp = NULL;
arelent **relppend = NULL;
- long stop;
+ long stop_offset;
asymbol *sym = NULL;
long place = 0;
@@ -1709,37 +1716,37 @@ disassemble_data (abfd)
disasm_info.buffer_length = datasize;
if (start_address == (bfd_vma) -1
|| start_address < disasm_info.buffer_vma)
- i = 0;
+ addr_offset = 0;
else
- i = start_address - disasm_info.buffer_vma;
+ addr_offset = start_address - disasm_info.buffer_vma;
if (stop_address == (bfd_vma) -1)
- stop = datasize;
+ stop_offset = datasize / opb;
else
{
if (stop_address < disasm_info.buffer_vma)
- stop = 0;
+ stop_offset = 0;
else
- stop = stop_address - disasm_info.buffer_vma;
- if (stop > disasm_info.buffer_length)
- stop = disasm_info.buffer_length;
+ stop_offset = stop_address - disasm_info.buffer_vma;
+ if (stop_offset > disasm_info.buffer_length / opb)
+ stop_offset = disasm_info.buffer_length / opb;
}
- sym = find_symbol_for_address (abfd, section, section->vma + i,
+ sym = find_symbol_for_address (abfd, section, section->vma + addr_offset,
true, &place);
- while (i < stop)
+ while (addr_offset < stop_offset)
{
asymbol *nextsym;
- long nextstop;
+ long nextstop_offset;
boolean insns;
- if (sym != NULL && bfd_asymbol_value (sym) <= section->vma + i)
+ if (sym != NULL && bfd_asymbol_value (sym) <= section->vma + addr_offset)
{
int x;
for (x = place;
(x < sorted_symcount
- && bfd_asymbol_value (sorted_syms[x]) <= section->vma + i);
+ && bfd_asymbol_value (sorted_syms[x]) <= section->vma + addr_offset);
++x)
continue;
disasm_info.symbols = & sorted_syms[place];
@@ -1752,13 +1759,13 @@ disassemble_data (abfd)
{
printf ("\n");
objdump_print_addr_with_sym (abfd, section, sym,
- section->vma + i,
+ section->vma + addr_offset,
&disasm_info,
false);
printf (":\n");
}
- if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
+ if (sym != NULL && bfd_asymbol_value (sym) > section->vma + addr_offset)
nextsym = sym;
else if (sym == NULL)
nextsym = NULL;
@@ -1779,19 +1786,19 @@ disassemble_data (abfd)
nextsym = sorted_syms[place];
}
- if (sym != NULL && bfd_asymbol_value (sym) > section->vma + i)
+ if (sym != NULL && bfd_asymbol_value (sym) > section->vma + addr_offset)
{
- nextstop = bfd_asymbol_value (sym) - section->vma;
- if (nextstop > stop)
- nextstop = stop;
+ nextstop_offset = bfd_asymbol_value (sym) - section->vma;
+ if (nextstop_offset > stop_offset)
+ nextstop_offset = stop_offset;
}
else if (nextsym == NULL)
- nextstop = stop;
+ nextstop_offset = stop_offset;
else
{
- nextstop = bfd_asymbol_value (nextsym) - section->vma;
- if (nextstop > stop)
- nextstop = stop;
+ nextstop_offset = bfd_asymbol_value (nextsym) - section->vma;
+ if (nextstop_offset > stop_offset)
+ nextstop_offset = stop_offset;
}
/* If a symbol is explicitly marked as being an object
@@ -1799,7 +1806,7 @@ disassemble_data (abfd)
disassembling them. */
if (disassemble_all
|| sym == NULL
- || bfd_asymbol_value (sym) > section->vma + i
+ || bfd_asymbol_value (sym) > section->vma + addr_offset
|| ((sym->flags & BSF_OBJECT) == 0
&& (strstr (bfd_asymbol_name (sym), "gnu_compiled")
== NULL)
@@ -1810,10 +1817,10 @@ disassemble_data (abfd)
else
insns = false;
- disassemble_bytes (&disasm_info, disassemble_fn, insns, data, i,
- nextstop, &relpp, relppend);
+ disassemble_bytes (&disasm_info, disassemble_fn, insns, data,
+ addr_offset, nextstop_offset, &relpp, relppend);
- i = nextstop;
+ addr_offset = nextstop_offset;
sym = nextsym;
}
@@ -2249,8 +2256,9 @@ dump_data (abfd)
asection *section;
bfd_byte *data = 0;
bfd_size_type datasize = 0;
- bfd_size_type i;
- bfd_size_type start, stop;
+ bfd_size_type addr_offset;
+ bfd_size_type start_offset, stop_offset;
+ int opb = bfd_octets_per_byte (abfd);
for (section = abfd->sections; section != NULL; section =
section->next)
@@ -2274,28 +2282,31 @@ dump_data (abfd)
if (start_address == (bfd_vma) -1
|| start_address < section->vma)
- start = 0;
+ start_offset = 0;
else
- start = start_address - section->vma;
+ start_offset = start_address - section->vma;
if (stop_address == (bfd_vma) -1)
- stop = bfd_section_size (abfd, section);
+ stop_offset = bfd_section_size (abfd, section) / opb;
else
{
if (stop_address < section->vma)
- stop = 0;
+ stop_offset = 0;
else
- stop = stop_address - section->vma;
- if (stop > bfd_section_size (abfd, section))
- stop = bfd_section_size (abfd, section);
+ stop_offset = stop_address - section->vma;
+ if (stop_offset > bfd_section_size (abfd, section) / opb)
+ stop_offset = bfd_section_size (abfd, section) / opb;
}
- for (i = start; i < stop; i += onaline)
+ for (addr_offset = start_offset;
+ addr_offset < stop_offset; addr_offset += onaline)
{
bfd_size_type j;
- printf (" %04lx ", (unsigned long int) (i + section->vma));
- for (j = i; j < i + onaline; j++)
+ printf (" %04lx ", (unsigned long int)
+ (addr_offset + section->vma));
+ for (j = addr_offset * opb;
+ j < addr_offset * opb + onaline; j++)
{
- if (j < stop)
+ if (j < stop_offset * opb)
printf ("%02x", (unsigned) (data[j]));
else
printf (" ");
@@ -2304,9 +2315,9 @@ dump_data (abfd)
}
printf (" ");
- for (j = i; j < i + onaline; j++)
+ for (j = addr_offset; j < addr_offset * opb + onaline; j++)
{
- if (j >= stop)
+ if (j >= stop_offset * opb)
printf (" ");
else
printf ("%c", isprint (data[j]) ? data[j] : '.');