/[gcl]/gcl/binutils/include/dis-asm.h
ViewVC logotype

Diff of /gcl/binutils/include/dis-asm.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by camm, Fri Aug 9 05:36:38 2002 UTC revision 1.1.1.1.20.1 by camm, Fri Sep 30 02:10:23 2005 UTC
# Line 1  Line 1 
1  /* Interface between the opcode library and its callers.  /* Interface between the opcode library and its callers.
2    
3     Copyright 2001, 2002 Free Software Foundation, Inc.     Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
4       Free Software Foundation, Inc.
5        
6     This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
# Line 34  extern "C" { Line 35  extern "C" {
35  #include <stdio.h>  #include <stdio.h>
36  #include "bfd.h"  #include "bfd.h"
37    
38  typedef int (*fprintf_ftype) PARAMS((PTR, const char*, ...));  typedef int (*fprintf_ftype) (void *, const char*, ...);
39    
40  enum dis_insn_type {  enum dis_insn_type {
41    dis_noninsn,                  /* Not a valid instruction */    dis_noninsn,                  /* Not a valid instruction */
# Line 59  enum dis_insn_type { Line 60  enum dis_insn_type {
60    
61  typedef struct disassemble_info {  typedef struct disassemble_info {
62    fprintf_ftype fprintf_func;    fprintf_ftype fprintf_func;
63    PTR stream;    void *stream;
64    PTR application_data;    void *application_data;
65    
66    /* Target description.  We could replace this with a pointer to the bfd,    /* Target description.  We could replace this with a pointer to the bfd,
67       but that would require one.  There currently isn't any such requirement       but that would require one.  There currently isn't any such requirement
# Line 98  typedef struct disassemble_info { Line 99  typedef struct disassemble_info {
99       The bottom 16 bits are for the internal use of the disassembler.  */       The bottom 16 bits are for the internal use of the disassembler.  */
100    unsigned long flags;    unsigned long flags;
101  #define INSN_HAS_RELOC  0x80000000  #define INSN_HAS_RELOC  0x80000000
102    PTR private_data;    void *private_data;
103    
104    /* Function used to get bytes to disassemble.  MEMADDR is the    /* Function used to get bytes to disassemble.  MEMADDR is the
105       address of the stuff to be disassembled, MYADDR is the address to       address of the stuff to be disassembled, MYADDR is the address to
# Line 106  typedef struct disassemble_info { Line 107  typedef struct disassemble_info {
107       INFO is a pointer to this struct.       INFO is a pointer to this struct.
108       Returns an errno value or 0 for success.  */       Returns an errno value or 0 for success.  */
109    int (*read_memory_func)    int (*read_memory_func)
110      PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,      (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
111               struct disassemble_info *info));       struct disassemble_info *info);
112    
113    /* Function which should be called if we get an error that we can't    /* Function which should be called if we get an error that we can't
114       recover from.  STATUS is the errno value from read_memory_func and       recover from.  STATUS is the errno value from read_memory_func and
115       MEMADDR is the address that we were trying to read.  INFO is a       MEMADDR is the address that we were trying to read.  INFO is a
116       pointer to this struct.  */       pointer to this struct.  */
117    void (*memory_error_func)    void (*memory_error_func)
118      PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info));      (int status, bfd_vma memaddr, struct disassemble_info *info);
119    
120    /* Function called to print ADDR.  */    /* Function called to print ADDR.  */
121    void (*print_address_func)    void (*print_address_func)
122      PARAMS ((bfd_vma addr, struct disassemble_info *info));      (bfd_vma addr, struct disassemble_info *info);
123    
124    /* Function called to determine if there is a symbol at the given ADDR.    /* Function called to determine if there is a symbol at the given ADDR.
125       If there is, the function returns 1, otherwise it returns 0.       If there is, the function returns 1, otherwise it returns 0.
# Line 128  typedef struct disassemble_info { Line 129  typedef struct disassemble_info {
129       address, (normally because there is a symbol associated with       address, (normally because there is a symbol associated with
130       that address), but sometimes we want to mask out the overlay bits.  */       that address), but sometimes we want to mask out the overlay bits.  */
131    int (* symbol_at_address_func)    int (* symbol_at_address_func)
132      PARAMS ((bfd_vma addr, struct disassemble_info * info));      (bfd_vma addr, struct disassemble_info * info);
133    
134      /* Function called to check if a SYMBOL is can be displayed to the user.
135         This is used by some ports that want to hide special symbols when
136         displaying debugging outout.  */
137      bfd_boolean (* symbol_is_valid)
138        (asymbol *, struct disassemble_info * info);
139        
140    /* These are for buffer_read_memory.  */    /* These are for buffer_read_memory.  */
141    bfd_byte *buffer;    bfd_byte *buffer;
142    bfd_vma buffer_vma;    bfd_vma buffer_vma;
# Line 141  typedef struct disassemble_info { Line 148  typedef struct disassemble_info {
148        the same value in order to get reasonable looking output.  */        the same value in order to get reasonable looking output.  */
149    int bytes_per_line;    int bytes_per_line;
150    
151    /* the next two variables control the way objdump displays the raw data */    /* The next two variables control the way objdump displays the raw data.  */
152    /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */    /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */
153    /* output will look like this:    /* output will look like this:
154       00:   00000000 00000000       00:   00000000 00000000
# Line 153  typedef struct disassemble_info { Line 160  typedef struct disassemble_info {
160       Normally one, but some DSPs have byte sizes of 16 or 32 bits.  */       Normally one, but some DSPs have byte sizes of 16 or 32 bits.  */
161    unsigned int octets_per_byte;    unsigned int octets_per_byte;
162    
163      /* The number of zeroes we want to see at the end of a section before we
164         start skipping them.  */
165      unsigned int skip_zeroes;
166    
167      /* The number of zeroes to skip at the end of a section.  If the number
168         of zeroes at the end is between SKIP_ZEROES_AT_END and SKIP_ZEROES,
169         they will be disassembled.  If there are fewer than
170         SKIP_ZEROES_AT_END, they will be skipped.  This is a heuristic
171         attempt to avoid disassembling zeroes inserted by section
172         alignment.  */
173      unsigned int skip_zeroes_at_end;
174    
175    /* Results from instruction decoders.  Not all decoders yet support    /* Results from instruction decoders.  Not all decoders yet support
176       this information.  This info is set each time an instruction is       this information.  This info is set each time an instruction is
177       decoded, and is only valid for the last such instruction.       decoded, and is only valid for the last such instruction.
# Line 177  typedef struct disassemble_info { Line 196  typedef struct disassemble_info {
196    
197  /* Standard disassemblers.  Disassemble one instruction at the given  /* Standard disassemblers.  Disassemble one instruction at the given
198     target address.  Return number of octets processed.  */     target address.  Return number of octets processed.  */
199  typedef int (*disassembler_ftype)  typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *);
      PARAMS((bfd_vma, disassemble_info *));  
200    
201  extern int print_insn_big_mips          PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_big_mips          (bfd_vma, disassemble_info *);
202  extern int print_insn_little_mips       PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_little_mips       (bfd_vma, disassemble_info *);
203  extern int print_insn_i386              PARAMS ((bfd_vma, disassemble_info *));  extern int print_insn_i386              (bfd_vma, disassemble_info *);
204  extern int print_insn_i386_att          PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_i386_att          (bfd_vma, disassemble_info *);
205  extern int print_insn_i386_intel        PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_i386_intel        (bfd_vma, disassemble_info *);
206  extern int print_insn_ia64              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_ia64              (bfd_vma, disassemble_info *);
207  extern int print_insn_i370              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_i370              (bfd_vma, disassemble_info *);
208  extern int print_insn_m68hc11           PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_m68hc11           (bfd_vma, disassemble_info *);
209  extern int print_insn_m68hc12           PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_m68hc12           (bfd_vma, disassemble_info *);
210  extern int print_insn_m68k              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_m68k              (bfd_vma, disassemble_info *);
211  extern int print_insn_z8001             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_z8001             (bfd_vma, disassemble_info *);
212  extern int print_insn_z8002             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_z8002             (bfd_vma, disassemble_info *);
213  extern int print_insn_h8300             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_h8300             (bfd_vma, disassemble_info *);
214  extern int print_insn_h8300h            PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_h8300h            (bfd_vma, disassemble_info *);
215  extern int print_insn_h8300s            PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_h8300s            (bfd_vma, disassemble_info *);
216  extern int print_insn_h8500             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_h8500             (bfd_vma, disassemble_info *);
217  extern int print_insn_alpha             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_alpha             (bfd_vma, disassemble_info *);
218  extern int print_insn_big_arm           PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_big_arm           (bfd_vma, disassemble_info *);
219  extern int print_insn_little_arm        PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_little_arm        (bfd_vma, disassemble_info *);
220  extern int print_insn_sparc             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_sparc             (bfd_vma, disassemble_info *);
221  extern int print_insn_big_a29k          PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_big_a29k          (bfd_vma, disassemble_info *);
222  extern int print_insn_little_a29k       PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_little_a29k       (bfd_vma, disassemble_info *);
223  extern int print_insn_avr               PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_avr               (bfd_vma, disassemble_info *);
224  extern int print_insn_d10v              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_d10v              (bfd_vma, disassemble_info *);
225  extern int print_insn_d30v              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_d30v              (bfd_vma, disassemble_info *);
226  extern int print_insn_dlx               PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_dlx               (bfd_vma, disassemble_info *);
227  extern int print_insn_fr30              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_fr30              (bfd_vma, disassemble_info *);
228  extern int print_insn_hppa              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_hppa              (bfd_vma, disassemble_info *);
229  extern int print_insn_i860              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_i860              (bfd_vma, disassemble_info *);
230  extern int print_insn_i960              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_i960              (bfd_vma, disassemble_info *);
231  extern int print_insn_m32r              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_ip2k              (bfd_vma, disassemble_info *);
232  extern int print_insn_m88k              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_m32r              (bfd_vma, disassemble_info *);
233  extern int print_insn_mcore             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_m88k              (bfd_vma, disassemble_info *);
234  extern int print_insn_mmix              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_maxq_little       (bfd_vma, disassemble_info *);
235  extern int print_insn_mn10200           PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_maxq_big          (bfd_vma, disassemble_info *);
236  extern int print_insn_mn10300           PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_mcore             (bfd_vma, disassemble_info *);
237  extern int print_insn_ns32k             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_mmix              (bfd_vma, disassemble_info *);
238  extern int print_insn_openrisc          PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_mn10200           (bfd_vma, disassemble_info *);
239  extern int print_insn_big_or32          PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_mn10300           (bfd_vma, disassemble_info *);
240  extern int print_insn_little_or32       PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_msp430            (bfd_vma, disassemble_info *);
241  extern int print_insn_pdp11             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_ns32k             (bfd_vma, disassemble_info *);
242  extern int print_insn_pj                PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_crx               (bfd_vma, disassemble_info *);
243  extern int print_insn_big_powerpc       PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_openrisc          (bfd_vma, disassemble_info *);
244  extern int print_insn_little_powerpc    PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_big_or32          (bfd_vma, disassemble_info *);
245  extern int print_insn_rs6000            PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_little_or32       (bfd_vma, disassemble_info *);
246  extern int print_insn_s390              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_pdp11             (bfd_vma, disassemble_info *);
247  extern int print_insn_sh                PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_pj                (bfd_vma, disassemble_info *);
248  extern int print_insn_tic30             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_big_powerpc       (bfd_vma, disassemble_info *);
249  extern int print_insn_tic54x            PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_little_powerpc    (bfd_vma, disassemble_info *);
250  extern int print_insn_tic80             PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_rs6000            (bfd_vma, disassemble_info *);
251  extern int print_insn_v850              PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_s390              (bfd_vma, disassemble_info *);
252  extern int print_insn_vax               PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_sh                (bfd_vma, disassemble_info *);
253  extern int print_insn_w65               PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_tic30             (bfd_vma, disassemble_info *);
254  extern int print_insn_xstormy16         PARAMS ((bfd_vma, disassemble_info*));  extern int print_insn_tic4x             (bfd_vma, disassemble_info *);
255  extern int print_insn_sh64              PARAMS ((bfd_vma, disassemble_info *));  extern int print_insn_tic54x            (bfd_vma, disassemble_info *);
256  extern int print_insn_sh64x_media       PARAMS ((bfd_vma, disassemble_info *));  extern int print_insn_tic80             (bfd_vma, disassemble_info *);
257  extern int print_insn_frv               PARAMS ((bfd_vma, disassemble_info *));  extern int print_insn_v850              (bfd_vma, disassemble_info *);
258    extern int print_insn_vax               (bfd_vma, disassemble_info *);
259  extern disassembler_ftype arc_get_disassembler PARAMS ((void *));  extern int print_insn_w65               (bfd_vma, disassemble_info *);
260  extern disassembler_ftype cris_get_disassembler PARAMS ((bfd *));  extern int print_insn_xstormy16         (bfd_vma, disassemble_info *);
261    extern int print_insn_xtensa            (bfd_vma, disassemble_info *);
262  extern void print_arm_disassembler_options PARAMS ((FILE *));  extern int print_insn_sh64              (bfd_vma, disassemble_info *);
263  extern void parse_arm_disassembler_option  PARAMS ((char *));  extern int print_insn_sh64x_media       (bfd_vma, disassemble_info *);
264  extern int  get_arm_regname_num_options    PARAMS ((void));  extern int print_insn_frv               (bfd_vma, disassemble_info *);
265  extern int  set_arm_regname_option         PARAMS ((int));  extern int print_insn_iq2000            (bfd_vma, disassemble_info *);
266  extern int  get_arm_regnames               PARAMS ((int, const char **, const char **, const char ***));  
267    extern disassembler_ftype arc_get_disassembler (void *);
268    extern disassembler_ftype cris_get_disassembler (bfd *);
269    
270    extern void print_mips_disassembler_options (FILE *);
271    extern void print_ppc_disassembler_options (FILE *);
272    extern void print_arm_disassembler_options (FILE *);
273    extern void parse_arm_disassembler_option (char *);
274    extern int get_arm_regname_num_options (void);
275    extern int set_arm_regname_option (int);
276    extern int get_arm_regnames (int, const char **, const char **, const char ***);
277    extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
278    
279  /* Fetch the disassembler for a given BFD, if that support is available.  */  /* Fetch the disassembler for a given BFD, if that support is available.  */
280  extern disassembler_ftype disassembler  PARAMS ((bfd *));  extern disassembler_ftype disassembler (bfd *);
281    
282    /* Amend the disassemble_info structure as necessary for the target architecture.
283       Should only be called after initialising the info->arch field.  */
284    extern void disassemble_init_for_target (struct disassemble_info * info);
285    
286  /* Document any target specific options available from the disassembler.  */  /* Document any target specific options available from the disassembler.  */
287  extern void disassembler_usage          PARAMS ((FILE *));  extern void disassembler_usage (FILE *);
288    
289    
290  /* This block of definitions is for particular callers who read instructions  /* This block of definitions is for particular callers who read instructions
# Line 260  extern void disassembler_usage Line 293  extern void disassembler_usage
293  /* Here is a function which callers may wish to use for read_memory_func.  /* Here is a function which callers may wish to use for read_memory_func.
294     It gets bytes from a buffer.  */     It gets bytes from a buffer.  */
295  extern int buffer_read_memory  extern int buffer_read_memory
296    PARAMS ((bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *));    (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *);
297    
298  /* This function goes with buffer_read_memory.  /* This function goes with buffer_read_memory.
299     It prints a message using info->fprintf_func and info->stream.  */     It prints a message using info->fprintf_func and info->stream.  */
300  extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *));  extern void perror_memory (int, bfd_vma, struct disassemble_info *);
301    
302    
303  /* Just print the address in hex.  This is included for completeness even  /* Just print the address in hex.  This is included for completeness even
304     though both GDB and objdump provide their own (to print symbolic     though both GDB and objdump provide their own (to print symbolic
305     addresses).  */     addresses).  */
306  extern void generic_print_address  extern void generic_print_address
307    PARAMS ((bfd_vma, struct disassemble_info *));    (bfd_vma, struct disassemble_info *);
308    
309  /* Always true.  */  /* Always true.  */
310  extern int generic_symbol_at_address  extern int generic_symbol_at_address
311    PARAMS ((bfd_vma, struct disassemble_info *));    (bfd_vma, struct disassemble_info *);
312    
313  /* Macro to initialize a disassemble_info struct.  This should be called  /* Also always true.  */  
314     by all applications creating such a struct.  */  extern bfd_boolean generic_symbol_is_valid
315  #define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \    (asymbol *, struct disassemble_info *);
316    (INFO).flavour = bfd_target_unknown_flavour, \    
317    (INFO).arch = bfd_arch_unknown, \  /* Method to initialize a disassemble_info struct.  This should be
318    (INFO).mach = 0, \     called by all applications creating such a struct.  */
319    (INFO).insn_sets = 0, \  extern void init_disassemble_info (struct disassemble_info *info, void *stream,
320    (INFO).endian = BFD_ENDIAN_UNKNOWN, \                                     fprintf_ftype fprintf_func);
   (INFO).octets_per_byte = 1, \  
   INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC)  
   
 /* Call this macro to initialize only the internal variables for the  
    disassembler.  Architecture dependent things such as byte order, or machine  
    variant are not touched by this macro.  This makes things much easier for  
    GDB which must initialize these things separately.  */  
321    
322    /* For compatibility with existing code.  */
323    #define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
324      init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
325  #define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \  #define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \
326    (INFO).fprintf_func = (fprintf_ftype)(FPRINTF_FUNC), \    init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
327    (INFO).stream = (PTR)(STREAM), \  
   (INFO).section = NULL, \  
   (INFO).symbols = NULL, \  
   (INFO).num_symbols = 0, \  
   (INFO).private_data = NULL, \  
   (INFO).buffer = NULL, \  
   (INFO).buffer_vma = 0, \  
   (INFO).buffer_length = 0, \  
   (INFO).read_memory_func = buffer_read_memory, \  
   (INFO).memory_error_func = perror_memory, \  
   (INFO).print_address_func = generic_print_address, \  
   (INFO).symbol_at_address_func = generic_symbol_at_address, \  
   (INFO).flags = 0, \  
   (INFO).bytes_per_line = 0, \  
   (INFO).bytes_per_chunk = 0, \  
   (INFO).display_endian = BFD_ENDIAN_UNKNOWN, \  
   (INFO).disassembler_options = NULL, \  
   (INFO).insn_info_valid = 0  
328    
329  #ifdef __cplusplus  #ifdef __cplusplus
330  };  }
331  #endif  #endif
332    
333  #endif /* ! defined (DIS_ASM_H) */  #endif /* ! defined (DIS_ASM_H) */

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.20.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26