X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fsh64-dis.c;h=edb73821162e9b4d52845f14ac60762e875f3afc;hb=331699936dd23746a7a079c63548c0ff25018320;hp=063c26104b8fbc264f3d256756640fe33e24d936;hpb=f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/sh64-dis.c b/opcodes/sh64-dis.c index 063c26104b..edb7382116 100644 --- a/opcodes/sh64-dis.c +++ b/opcodes/sh64-dis.c @@ -1,19 +1,22 @@ /* Disassemble SH64 instructions. - Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + This file is part of the GNU opcodes library. + + This library 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 2 of the License, or - (at your option) any later version. + the Free Software Foundation; either version 3, or (at your option) + any later version. - This program 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. + It 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + along with this file; see the file COPYING. If not, write to the + Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ #include @@ -21,7 +24,6 @@ #include "sysdep.h" #include "sh64-opc.h" #include "libiberty.h" - /* We need to refer to the ELF header structure. */ #include "elf-bfd.h" #include "elf/sh.h" @@ -54,18 +56,11 @@ struct sh64_disassemble_info Note that some archs have this as a field in the opcode table. */ static unsigned long *shmedia_opcode_mask_table; -static void initialize_shmedia_opcode_mask_table PARAMS ((void)); -static int print_insn_shmedia PARAMS ((bfd_vma, disassemble_info *)); -static const char *creg_name PARAMS ((int)); -static bfd_boolean init_sh64_disasm_info PARAMS ((struct disassemble_info *)); -static enum sh64_elf_cr_type sh64_get_contents_type_disasm - PARAMS ((bfd_vma, struct disassemble_info *)); - /* Initialize the SH64 opcode mask table for each instruction in SHmedia mode. */ static void -initialize_shmedia_opcode_mask_table () +initialize_shmedia_opcode_mask_table (void) { int n_opc; int n; @@ -163,19 +158,16 @@ initialize_shmedia_opcode_mask_table () /* Get a predefined control-register-name, or return NULL. */ -const char * -creg_name (cregno) - int cregno; +static const char * +creg_name (int cregno) { const shmedia_creg_info *cregp; /* If control register usage is common enough, change this to search a hash-table. */ for (cregp = shmedia_creg_table; cregp->name != NULL; cregp++) - { - if (cregp->cregno == cregno) - return cregp->name; - } + if (cregp->cregno == cregno) + return cregp->name; return NULL; } @@ -183,13 +175,10 @@ creg_name (cregno) /* Main function to disassemble SHmedia instructions. */ static int -print_insn_shmedia (memaddr, info) - bfd_vma memaddr; - struct disassemble_info *info; +print_insn_shmedia (bfd_vma memaddr, struct disassemble_info *info) { fprintf_ftype fprintf_fn = info->fprintf_func; void *stream = info->stream; - unsigned char insn[4]; unsigned long instruction; int status; @@ -238,7 +227,7 @@ print_insn_shmedia (memaddr, info) /* FIXME: We should also check register number constraints. */ if (op->name == NULL) { - fprintf_fn (stream, ".long 0x%08x", instruction); + fprintf_fn (stream, ".long 0x%08lx", instruction); return 4; } @@ -289,6 +278,7 @@ print_insn_shmedia (memaddr, info) case A_CREG_J: { const char *name; + r = temp & 0x3f; name = creg_name (r); @@ -325,7 +315,7 @@ print_insn_shmedia (memaddr, info) imm = temp & 0x3f; if (imm & (unsigned long) 0x20) imm |= ~(unsigned long) 0x3f; - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; /* A signed 6-bit number, multiplied by 32 when used. */ @@ -333,7 +323,7 @@ print_insn_shmedia (memaddr, info) imm = temp & 0x3f; if (imm & (unsigned long) 0x20) imm |= ~(unsigned long) 0x3f; - fprintf_fn (stream, "%d", imm * 32); + fprintf_fn (stream, "%ld", imm * 32); break; /* A signed 10-bit number, multiplied by 8 when used. */ @@ -358,7 +348,7 @@ print_insn_shmedia (memaddr, info) if (imm & (unsigned long) 0x200) imm |= ~(unsigned long) 0x3ff; imm <<= by_number; - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; /* A signed 16-bit number. */ @@ -366,7 +356,7 @@ print_insn_shmedia (memaddr, info) imm = temp & 0xffff; if (imm & (unsigned long) 0x8000) imm |= ~((unsigned long) 0xffff); - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; /* A PC-relative signed 16-bit number, multiplied by 4 when @@ -383,19 +373,19 @@ print_insn_shmedia (memaddr, info) /* An unsigned 5-bit number. */ case A_IMMU5: imm = temp & 0x1f; - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; /* An unsigned 6-bit number. */ case A_IMMU6: imm = temp & 0x3f; - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; /* An unsigned 16-bit number. */ case A_IMMU16: imm = temp & 0xffff; - fprintf_fn (stream, "%d", imm); + fprintf_fn (stream, "%ld", imm); break; default: @@ -457,9 +447,7 @@ print_insn_shmedia (memaddr, info) no section is available. */ static enum sh64_elf_cr_type -sh64_get_contents_type_disasm (memaddr, info) - bfd_vma memaddr; - struct disassemble_info *info; +sh64_get_contents_type_disasm (bfd_vma memaddr, struct disassemble_info *info) { struct sh64_disassemble_info *sh64_infop = info->private_data; @@ -513,8 +501,7 @@ sh64_get_contents_type_disasm (memaddr, info) /* Initialize static and dynamic disassembly state. */ static bfd_boolean -init_sh64_disasm_info (info) - struct disassemble_info *info; +init_sh64_disasm_info (struct disassemble_info *info) { struct sh64_disassemble_info *sh64_infop = calloc (sizeof (*sh64_infop), 1); @@ -538,9 +525,7 @@ init_sh64_disasm_info (info) use any of the functions further below. */ int -print_insn_sh64x_media (memaddr, info) - bfd_vma memaddr; - struct disassemble_info *info; +print_insn_sh64x_media (bfd_vma memaddr, struct disassemble_info *info) { if (info->private_data == NULL && ! init_sh64_disasm_info (info)) return -1; @@ -556,9 +541,7 @@ print_insn_sh64x_media (memaddr, info) If we see an SHcompact instruction, return -2. */ int -print_insn_sh64 (memaddr, info) - bfd_vma memaddr; - struct disassemble_info *info; +print_insn_sh64 (bfd_vma memaddr, struct disassemble_info *info) { enum bfd_endian endian = info->endian; enum sh64_elf_cr_type cr_type;