00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef DIS_ASM_H
00033 #define DIS_ASM_H
00034
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038
00039 #include <stdio.h>
00040 #include "bfd.h"
00041
00042 typedef int (*fprintf_ftype) (void *, const char*, ...);
00043
00044 enum dis_insn_type {
00045 dis_noninsn,
00046 dis_nonbranch,
00047 dis_branch,
00048 dis_condbranch,
00049 dis_jsr,
00050 dis_condjsr,
00051 dis_dref,
00052 dis_dref2
00053 };
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 typedef struct disassemble_info {
00066 fprintf_ftype fprintf_func;
00067 void *stream;
00068 void *application_data;
00069
00070
00071
00072
00073
00074 enum bfd_flavour flavour;
00075
00076 enum bfd_architecture arch;
00077
00078 unsigned long mach;
00079
00080 enum bfd_endian endian;
00081
00082
00083
00084
00085 unsigned long insn_sets;
00086
00087
00088
00089
00090 asection *section;
00091
00092
00093
00094
00095
00096
00097 asymbol **symbols;
00098
00099 int num_symbols;
00100
00101
00102
00103
00104 unsigned long flags;
00105 #define INSN_HAS_RELOC 0x80000000
00106 void *private_data;
00107
00108
00109
00110
00111
00112
00113 int (*read_memory_func)
00114 (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
00115 struct disassemble_info *info);
00116
00117
00118
00119
00120
00121 void (*memory_error_func)
00122 (int status, bfd_vma memaddr, struct disassemble_info *info);
00123
00124
00125 void (*print_address_func)
00126 (bfd_vma addr, struct disassemble_info *info);
00127
00128
00129
00130
00131
00132
00133
00134
00135 int (* symbol_at_address_func)
00136 (bfd_vma addr, struct disassemble_info * info);
00137
00138
00139
00140
00141 bfd_boolean (* symbol_is_valid)
00142 (asymbol *, struct disassemble_info * info);
00143
00144
00145 bfd_byte *buffer;
00146 bfd_vma buffer_vma;
00147 unsigned int buffer_length;
00148
00149
00150
00151
00152
00153 int bytes_per_line;
00154
00155
00156
00157
00158
00159
00160 int bytes_per_chunk;
00161 enum bfd_endian display_endian;
00162
00163
00164
00165 unsigned int octets_per_byte;
00166
00167
00168
00169 unsigned int skip_zeroes;
00170
00171
00172
00173
00174
00175
00176
00177 unsigned int skip_zeroes_at_end;
00178
00179
00180
00181
00182
00183
00184
00185
00186 char insn_info_valid;
00187 char branch_delay_insns;
00188
00189 char data_size;
00190 enum dis_insn_type insn_type;
00191 bfd_vma target;
00192
00193 bfd_vma target2;
00194
00195
00196 char * disassembler_options;
00197
00198 } disassemble_info;
00199
00200
00201
00202
00203 typedef int (*disassembler_ftype) (bfd_vma, disassemble_info *);
00204
00205 extern int print_insn_big_mips (bfd_vma, disassemble_info *);
00206 extern int print_insn_little_mips (bfd_vma, disassemble_info *);
00207 extern int print_insn_i386 (bfd_vma, disassemble_info *);
00208 extern int print_insn_i386_att (bfd_vma, disassemble_info *);
00209 extern int print_insn_i386_intel (bfd_vma, disassemble_info *);
00210 extern int print_insn_ia64 (bfd_vma, disassemble_info *);
00211 extern int print_insn_i370 (bfd_vma, disassemble_info *);
00212 extern int print_insn_m68hc11 (bfd_vma, disassemble_info *);
00213 extern int print_insn_m68hc12 (bfd_vma, disassemble_info *);
00214 extern int print_insn_m68k (bfd_vma, disassemble_info *);
00215 extern int print_insn_z8001 (bfd_vma, disassemble_info *);
00216 extern int print_insn_z8002 (bfd_vma, disassemble_info *);
00217 extern int print_insn_h8300 (bfd_vma, disassemble_info *);
00218 extern int print_insn_h8300h (bfd_vma, disassemble_info *);
00219 extern int print_insn_h8300s (bfd_vma, disassemble_info *);
00220 extern int print_insn_h8500 (bfd_vma, disassemble_info *);
00221 extern int print_insn_alpha (bfd_vma, disassemble_info *);
00222 extern int print_insn_big_arm (bfd_vma, disassemble_info *);
00223 extern int print_insn_little_arm (bfd_vma, disassemble_info *);
00224 extern int print_insn_sparc (bfd_vma, disassemble_info *);
00225 extern int print_insn_big_a29k (bfd_vma, disassemble_info *);
00226 extern int print_insn_little_a29k (bfd_vma, disassemble_info *);
00227 extern int print_insn_avr (bfd_vma, disassemble_info *);
00228 extern int print_insn_d10v (bfd_vma, disassemble_info *);
00229 extern int print_insn_d30v (bfd_vma, disassemble_info *);
00230 extern int print_insn_dlx (bfd_vma, disassemble_info *);
00231 extern int print_insn_fr30 (bfd_vma, disassemble_info *);
00232 extern int print_insn_hppa (bfd_vma, disassemble_info *);
00233 extern int print_insn_i860 (bfd_vma, disassemble_info *);
00234 extern int print_insn_i960 (bfd_vma, disassemble_info *);
00235 extern int print_insn_ip2k (bfd_vma, disassemble_info *);
00236 extern int print_insn_m32r (bfd_vma, disassemble_info *);
00237 extern int print_insn_m88k (bfd_vma, disassemble_info *);
00238 extern int print_insn_maxq_little (bfd_vma, disassemble_info *);
00239 extern int print_insn_maxq_big (bfd_vma, disassemble_info *);
00240 extern int print_insn_mcore (bfd_vma, disassemble_info *);
00241 extern int print_insn_mmix (bfd_vma, disassemble_info *);
00242 extern int print_insn_mn10200 (bfd_vma, disassemble_info *);
00243 extern int print_insn_mn10300 (bfd_vma, disassemble_info *);
00244 extern int print_insn_msp430 (bfd_vma, disassemble_info *);
00245 extern int print_insn_ns32k (bfd_vma, disassemble_info *);
00246 extern int print_insn_crx (bfd_vma, disassemble_info *);
00247 extern int print_insn_openrisc (bfd_vma, disassemble_info *);
00248 extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
00249 extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
00250 extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
00251 extern int print_insn_pj (bfd_vma, disassemble_info *);
00252 extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
00253 extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
00254 extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
00255 extern int print_insn_s390 (bfd_vma, disassemble_info *);
00256 extern int print_insn_sh (bfd_vma, disassemble_info *);
00257 extern int print_insn_tic30 (bfd_vma, disassemble_info *);
00258 extern int print_insn_tic4x (bfd_vma, disassemble_info *);
00259 extern int print_insn_tic54x (bfd_vma, disassemble_info *);
00260 extern int print_insn_tic80 (bfd_vma, disassemble_info *);
00261 extern int print_insn_v850 (bfd_vma, disassemble_info *);
00262 extern int print_insn_vax (bfd_vma, disassemble_info *);
00263 extern int print_insn_w65 (bfd_vma, disassemble_info *);
00264 extern int print_insn_xstormy16 (bfd_vma, disassemble_info *);
00265 extern int print_insn_xtensa (bfd_vma, disassemble_info *);
00266 extern int print_insn_sh64 (bfd_vma, disassemble_info *);
00267 extern int print_insn_sh64x_media (bfd_vma, disassemble_info *);
00268 extern int print_insn_frv (bfd_vma, disassemble_info *);
00269 extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
00270
00271 extern disassembler_ftype arc_get_disassembler (void *);
00272 extern disassembler_ftype cris_get_disassembler (bfd *);
00273
00274 extern void print_mips_disassembler_options (FILE *);
00275 extern void print_ppc_disassembler_options (FILE *);
00276 extern void print_arm_disassembler_options (FILE *);
00277 extern void parse_arm_disassembler_option (char *);
00278 extern int get_arm_regname_num_options (void);
00279 extern int set_arm_regname_option (int);
00280 extern int get_arm_regnames (int, const char **, const char **, const char ***);
00281 extern bfd_boolean arm_symbol_is_valid (asymbol *, struct disassemble_info *);
00282
00283
00284 extern disassembler_ftype disassembler (bfd *);
00285
00286
00287
00288 extern void disassemble_init_for_target (struct disassemble_info * info);
00289
00290
00291 extern void disassembler_usage (FILE *);
00292
00293
00294
00295
00296
00297
00298
00299 extern int buffer_read_memory
00300 (bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *);
00301
00302
00303
00304 extern void perror_memory (int, bfd_vma, struct disassemble_info *);
00305
00306
00307
00308
00309
00310 extern void generic_print_address
00311 (bfd_vma, struct disassemble_info *);
00312
00313
00314 extern int generic_symbol_at_address
00315 (bfd_vma, struct disassemble_info *);
00316
00317
00318 extern bfd_boolean generic_symbol_is_valid
00319 (asymbol *, struct disassemble_info *);
00320
00321
00322
00323 extern void init_disassemble_info (struct disassemble_info *info, void *stream,
00324 fprintf_ftype fprintf_func);
00325
00326
00327 #define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \
00328 init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
00329 #define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \
00330 init_disassemble_info (&(INFO), (STREAM), (fprintf_ftype) (FPRINTF_FUNC))
00331
00332
00333 #ifdef __cplusplus
00334 }
00335 #endif
00336
00337 #endif