X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fdis-buf.c;h=8f846a9b1b79cb2b2346459a3755f91be8c63fd9;hb=426e6456c0f627dc7be0b40553f6f2e874540f8c;hp=d76be2ec8721983bfddc695e7d21cbc083c340c1;hpb=5b64ad42d36e6d487e1f7287d37fbc243a178e72;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/dis-buf.c b/opcodes/dis-buf.c index d76be2ec87..8f846a9b1b 100644 --- a/opcodes/dis-buf.c +++ b/opcodes/dis-buf.c @@ -1,5 +1,6 @@ /* Disassemble from a buffer, for GNU. - Copyright (C) 1993, 1994, 1998 Free Software Foundation, Inc. + Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000 + Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,14 +27,20 @@ int buffer_read_memory (memaddr, myaddr, length, info) bfd_vma memaddr; bfd_byte *myaddr; - int length; + unsigned int length; struct disassemble_info *info; { + unsigned int opb = info->octets_per_byte; + unsigned int end_addr_offset = length / opb; + unsigned int max_addr_offset = info->buffer_length / opb; + unsigned int octets = (memaddr - info->buffer_vma) * opb; + if (memaddr < info->buffer_vma - || memaddr + length > info->buffer_vma + info->buffer_length) + || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset) /* Out of bounds. Use EIO because GDB uses it. */ return EIO; - memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length); + memcpy (myaddr, info->buffer + octets, length); + return 0; } @@ -67,13 +74,19 @@ generic_print_address (addr, info) bfd_vma addr; struct disassemble_info *info; { - (*info->fprintf_func) (info->stream, "0x%x", addr); + char buf[30]; + + sprintf_vma (buf, addr); + (*info->fprintf_func) (info->stream, "0x%s", buf); } +#if 0 /* Just concatenate the address as hex. This is included for completeness even though both GDB and objdump provide their own (to print symbolic addresses). */ +void generic_strcat_address PARAMS ((bfd_vma, char *, int)); + void generic_strcat_address (addr, buf, len) bfd_vma addr; @@ -85,20 +98,21 @@ generic_strcat_address (addr, buf, len) char tmpBuf[30]; sprintf_vma (tmpBuf, addr); - if ((strlen (buf) + strlen (tmpBuf)) <= len) + if ((strlen (buf) + strlen (tmpBuf)) <= (unsigned int) len) strcat (buf, tmpBuf); else strncat (buf, tmpBuf, (len - strlen(buf))); } return; } +#endif /* Just return the given address. */ int generic_symbol_at_address (addr, info) - bfd_vma addr; - struct disassemble_info * info; + bfd_vma addr ATTRIBUTE_UNUSED; + struct disassemble_info *info ATTRIBUTE_UNUSED; { return 1; }