disassemble.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. /* Select disassembly routine for specified architecture.
  2. Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  3. 2004, 2005, 2006 Free Software Foundation, Inc.
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
  15. #include "sysdep.h"
  16. #include "dis-asm.h"
  17. /* Kevin Kofler 20070404 dummy function */
  18. enum bfd_architecture bfd_get_arch (bfd *abfd ATTRIBUTE_UNUSED)
  19. {
  20. return bfd_arch_m68k;
  21. }
  22. #ifdef ARCH_all
  23. #define ARCH_alpha
  24. #define ARCH_arc
  25. #define ARCH_arm
  26. #define ARCH_avr
  27. #define ARCH_bfin
  28. #define ARCH_cris
  29. #define ARCH_crx
  30. #define ARCH_d10v
  31. #define ARCH_d30v
  32. #define ARCH_dlx
  33. #define ARCH_fr30
  34. #define ARCH_frv
  35. #define ARCH_h8300
  36. #define ARCH_h8500
  37. #define ARCH_hppa
  38. #define ARCH_i370
  39. #define ARCH_i386
  40. #define ARCH_i860
  41. #define ARCH_i960
  42. #define ARCH_ia64
  43. #define ARCH_ip2k
  44. #define ARCH_iq2000
  45. #define ARCH_m32c
  46. #define ARCH_m32r
  47. #define ARCH_m68hc11
  48. #define ARCH_m68hc12
  49. #define ARCH_m68k
  50. #define ARCH_m88k
  51. #define ARCH_maxq
  52. #define ARCH_mcore
  53. #define ARCH_mips
  54. #define ARCH_mmix
  55. #define ARCH_mn10200
  56. #define ARCH_mn10300
  57. #define ARCH_mt
  58. #define ARCH_msp430
  59. #define ARCH_ns32k
  60. #define ARCH_openrisc
  61. #define ARCH_or32
  62. #define ARCH_pdp11
  63. #define ARCH_pj
  64. #define ARCH_powerpc
  65. #define ARCH_rs6000
  66. #define ARCH_s390
  67. #define ARCH_score
  68. #define ARCH_sh
  69. #define ARCH_sparc
  70. #define ARCH_spu
  71. #define ARCH_tic30
  72. #define ARCH_tic4x
  73. #define ARCH_tic54x
  74. #define ARCH_tic80
  75. #define ARCH_v850
  76. #define ARCH_vax
  77. #define ARCH_w65
  78. #define ARCH_xstormy16
  79. #define ARCH_xc16x
  80. #define ARCH_xtensa
  81. #define ARCH_z80
  82. #define ARCH_z8k
  83. #define INCLUDE_SHMEDIA
  84. #endif
  85. #ifdef ARCH_m32c
  86. #include "m32c-desc.h"
  87. #endif
  88. disassembler_ftype
  89. disassembler (abfd)
  90. bfd *abfd;
  91. {
  92. enum bfd_architecture a = bfd_get_arch (abfd);
  93. disassembler_ftype disassemble;
  94. switch (a)
  95. {
  96. /* If you add a case to this table, also add it to the
  97. ARCH_all definition right above this function. */
  98. #ifdef ARCH_alpha
  99. case bfd_arch_alpha:
  100. disassemble = print_insn_alpha;
  101. break;
  102. #endif
  103. #ifdef ARCH_arc
  104. case bfd_arch_arc:
  105. {
  106. disassemble = arc_get_disassembler (abfd);
  107. break;
  108. }
  109. #endif
  110. #ifdef ARCH_arm
  111. case bfd_arch_arm:
  112. if (bfd_big_endian (abfd))
  113. disassemble = print_insn_big_arm;
  114. else
  115. disassemble = print_insn_little_arm;
  116. break;
  117. #endif
  118. #ifdef ARCH_avr
  119. case bfd_arch_avr:
  120. disassemble = print_insn_avr;
  121. break;
  122. #endif
  123. #ifdef ARCH_bfin
  124. case bfd_arch_bfin:
  125. disassemble = print_insn_bfin;
  126. break;
  127. #endif
  128. #ifdef ARCH_cris
  129. case bfd_arch_cris:
  130. disassemble = cris_get_disassembler (abfd);
  131. break;
  132. #endif
  133. #ifdef ARCH_crx
  134. case bfd_arch_crx:
  135. disassemble = print_insn_crx;
  136. break;
  137. #endif
  138. #ifdef ARCH_d10v
  139. case bfd_arch_d10v:
  140. disassemble = print_insn_d10v;
  141. break;
  142. #endif
  143. #ifdef ARCH_d30v
  144. case bfd_arch_d30v:
  145. disassemble = print_insn_d30v;
  146. break;
  147. #endif
  148. #ifdef ARCH_dlx
  149. case bfd_arch_dlx:
  150. /* As far as I know we only handle big-endian DLX objects. */
  151. disassemble = print_insn_dlx;
  152. break;
  153. #endif
  154. #ifdef ARCH_h8300
  155. case bfd_arch_h8300:
  156. if (bfd_get_mach (abfd) == bfd_mach_h8300h
  157. || bfd_get_mach (abfd) == bfd_mach_h8300hn)
  158. disassemble = print_insn_h8300h;
  159. else if (bfd_get_mach (abfd) == bfd_mach_h8300s
  160. || bfd_get_mach (abfd) == bfd_mach_h8300sn
  161. || bfd_get_mach (abfd) == bfd_mach_h8300sx
  162. || bfd_get_mach (abfd) == bfd_mach_h8300sxn)
  163. disassemble = print_insn_h8300s;
  164. else
  165. disassemble = print_insn_h8300;
  166. break;
  167. #endif
  168. #ifdef ARCH_h8500
  169. case bfd_arch_h8500:
  170. disassemble = print_insn_h8500;
  171. break;
  172. #endif
  173. #ifdef ARCH_hppa
  174. case bfd_arch_hppa:
  175. disassemble = print_insn_hppa;
  176. break;
  177. #endif
  178. #ifdef ARCH_i370
  179. case bfd_arch_i370:
  180. disassemble = print_insn_i370;
  181. break;
  182. #endif
  183. #ifdef ARCH_i386
  184. case bfd_arch_i386:
  185. disassemble = print_insn_i386;
  186. break;
  187. #endif
  188. #ifdef ARCH_i860
  189. case bfd_arch_i860:
  190. disassemble = print_insn_i860;
  191. break;
  192. #endif
  193. #ifdef ARCH_i960
  194. case bfd_arch_i960:
  195. disassemble = print_insn_i960;
  196. break;
  197. #endif
  198. #ifdef ARCH_ia64
  199. case bfd_arch_ia64:
  200. disassemble = print_insn_ia64;
  201. break;
  202. #endif
  203. #ifdef ARCH_ip2k
  204. case bfd_arch_ip2k:
  205. disassemble = print_insn_ip2k;
  206. break;
  207. #endif
  208. #ifdef ARCH_fr30
  209. case bfd_arch_fr30:
  210. disassemble = print_insn_fr30;
  211. break;
  212. #endif
  213. #ifdef ARCH_m32r
  214. case bfd_arch_m32r:
  215. disassemble = print_insn_m32r;
  216. break;
  217. #endif
  218. #if defined(ARCH_m68hc11) || defined(ARCH_m68hc12)
  219. case bfd_arch_m68hc11:
  220. disassemble = print_insn_m68hc11;
  221. break;
  222. case bfd_arch_m68hc12:
  223. disassemble = print_insn_m68hc12;
  224. break;
  225. #endif
  226. #ifdef ARCH_m68k
  227. case bfd_arch_m68k:
  228. disassemble = print_insn_m68k;
  229. break;
  230. #endif
  231. #ifdef ARCH_m88k
  232. case bfd_arch_m88k:
  233. disassemble = print_insn_m88k;
  234. break;
  235. #endif
  236. #ifdef ARCH_maxq
  237. case bfd_arch_maxq:
  238. disassemble = print_insn_maxq_little;
  239. break;
  240. #endif
  241. #ifdef ARCH_mt
  242. case bfd_arch_mt:
  243. disassemble = print_insn_mt;
  244. break;
  245. #endif
  246. #ifdef ARCH_msp430
  247. case bfd_arch_msp430:
  248. disassemble = print_insn_msp430;
  249. break;
  250. #endif
  251. #ifdef ARCH_ns32k
  252. case bfd_arch_ns32k:
  253. disassemble = print_insn_ns32k;
  254. break;
  255. #endif
  256. #ifdef ARCH_mcore
  257. case bfd_arch_mcore:
  258. disassemble = print_insn_mcore;
  259. break;
  260. #endif
  261. #ifdef ARCH_mips
  262. case bfd_arch_mips:
  263. if (bfd_big_endian (abfd))
  264. disassemble = print_insn_big_mips;
  265. else
  266. disassemble = print_insn_little_mips;
  267. break;
  268. #endif
  269. #ifdef ARCH_mmix
  270. case bfd_arch_mmix:
  271. disassemble = print_insn_mmix;
  272. break;
  273. #endif
  274. #ifdef ARCH_mn10200
  275. case bfd_arch_mn10200:
  276. disassemble = print_insn_mn10200;
  277. break;
  278. #endif
  279. #ifdef ARCH_mn10300
  280. case bfd_arch_mn10300:
  281. disassemble = print_insn_mn10300;
  282. break;
  283. #endif
  284. #ifdef ARCH_openrisc
  285. case bfd_arch_openrisc:
  286. disassemble = print_insn_openrisc;
  287. break;
  288. #endif
  289. #ifdef ARCH_or32
  290. case bfd_arch_or32:
  291. if (bfd_big_endian (abfd))
  292. disassemble = print_insn_big_or32;
  293. else
  294. disassemble = print_insn_little_or32;
  295. break;
  296. #endif
  297. #ifdef ARCH_pdp11
  298. case bfd_arch_pdp11:
  299. disassemble = print_insn_pdp11;
  300. break;
  301. #endif
  302. #ifdef ARCH_pj
  303. case bfd_arch_pj:
  304. disassemble = print_insn_pj;
  305. break;
  306. #endif
  307. #ifdef ARCH_powerpc
  308. case bfd_arch_powerpc:
  309. if (bfd_big_endian (abfd))
  310. disassemble = print_insn_big_powerpc;
  311. else
  312. disassemble = print_insn_little_powerpc;
  313. break;
  314. #endif
  315. #ifdef ARCH_rs6000
  316. case bfd_arch_rs6000:
  317. if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
  318. disassemble = print_insn_big_powerpc;
  319. else
  320. disassemble = print_insn_rs6000;
  321. break;
  322. #endif
  323. #ifdef ARCH_s390
  324. case bfd_arch_s390:
  325. disassemble = print_insn_s390;
  326. break;
  327. #endif
  328. #ifdef ARCH_score
  329. case bfd_arch_score:
  330. if (bfd_big_endian (abfd))
  331. disassemble = print_insn_big_score;
  332. else
  333. disassemble = print_insn_little_score;
  334. break;
  335. #endif
  336. #ifdef ARCH_sh
  337. case bfd_arch_sh:
  338. disassemble = print_insn_sh;
  339. break;
  340. #endif
  341. #ifdef ARCH_sparc
  342. case bfd_arch_sparc:
  343. disassemble = print_insn_sparc;
  344. break;
  345. #endif
  346. #ifdef ARCH_spu
  347. case bfd_arch_spu:
  348. disassemble = print_insn_spu;
  349. break;
  350. #endif
  351. #ifdef ARCH_tic30
  352. case bfd_arch_tic30:
  353. disassemble = print_insn_tic30;
  354. break;
  355. #endif
  356. #ifdef ARCH_tic4x
  357. case bfd_arch_tic4x:
  358. disassemble = print_insn_tic4x;
  359. break;
  360. #endif
  361. #ifdef ARCH_tic54x
  362. case bfd_arch_tic54x:
  363. disassemble = print_insn_tic54x;
  364. break;
  365. #endif
  366. #ifdef ARCH_tic80
  367. case bfd_arch_tic80:
  368. disassemble = print_insn_tic80;
  369. break;
  370. #endif
  371. #ifdef ARCH_v850
  372. case bfd_arch_v850:
  373. disassemble = print_insn_v850;
  374. break;
  375. #endif
  376. #ifdef ARCH_w65
  377. case bfd_arch_w65:
  378. disassemble = print_insn_w65;
  379. break;
  380. #endif
  381. #ifdef ARCH_xstormy16
  382. case bfd_arch_xstormy16:
  383. disassemble = print_insn_xstormy16;
  384. break;
  385. #endif
  386. #ifdef ARCH_xc16x
  387. case bfd_arch_xc16x:
  388. disassemble = print_insn_xc16x;
  389. break;
  390. #endif
  391. #ifdef ARCH_xtensa
  392. case bfd_arch_xtensa:
  393. disassemble = print_insn_xtensa;
  394. break;
  395. #endif
  396. #ifdef ARCH_z80
  397. case bfd_arch_z80:
  398. disassemble = print_insn_z80;
  399. break;
  400. #endif
  401. #ifdef ARCH_z8k
  402. case bfd_arch_z8k:
  403. if (bfd_get_mach(abfd) == bfd_mach_z8001)
  404. disassemble = print_insn_z8001;
  405. else
  406. disassemble = print_insn_z8002;
  407. break;
  408. #endif
  409. #ifdef ARCH_vax
  410. case bfd_arch_vax:
  411. disassemble = print_insn_vax;
  412. break;
  413. #endif
  414. #ifdef ARCH_frv
  415. case bfd_arch_frv:
  416. disassemble = print_insn_frv;
  417. break;
  418. #endif
  419. #ifdef ARCH_iq2000
  420. case bfd_arch_iq2000:
  421. disassemble = print_insn_iq2000;
  422. break;
  423. #endif
  424. #ifdef ARCH_m32c
  425. case bfd_arch_m32c:
  426. disassemble = print_insn_m32c;
  427. break;
  428. #endif
  429. default:
  430. return 0;
  431. }
  432. return disassemble;
  433. }
  434. void
  435. disassembler_usage (stream)
  436. FILE * stream ATTRIBUTE_UNUSED;
  437. {
  438. #ifdef ARCH_arm
  439. print_arm_disassembler_options (stream);
  440. #endif
  441. #ifdef ARCH_mips
  442. print_mips_disassembler_options (stream);
  443. #endif
  444. #ifdef ARCH_powerpc
  445. print_ppc_disassembler_options (stream);
  446. #endif
  447. return;
  448. }
  449. void
  450. disassemble_init_for_target (struct disassemble_info * info)
  451. {
  452. if (info == NULL)
  453. return;
  454. switch (info->arch)
  455. {
  456. #ifdef ARCH_arm
  457. case bfd_arch_arm:
  458. info->symbol_is_valid = arm_symbol_is_valid;
  459. info->disassembler_needs_relocs = TRUE;
  460. break;
  461. #endif
  462. #ifdef ARCH_ia64
  463. case bfd_arch_ia64:
  464. info->skip_zeroes = 16;
  465. break;
  466. #endif
  467. #ifdef ARCH_tic4x
  468. case bfd_arch_tic4x:
  469. info->skip_zeroes = 32;
  470. break;
  471. #endif
  472. #ifdef ARCH_m32c
  473. case bfd_arch_m32c:
  474. info->endian = BFD_ENDIAN_BIG;
  475. if (! info->insn_sets)
  476. {
  477. info->insn_sets = cgen_bitset_create (ISA_MAX);
  478. if (info->mach == bfd_mach_m16c)
  479. cgen_bitset_set (info->insn_sets, ISA_M16C);
  480. else
  481. cgen_bitset_set (info->insn_sets, ISA_M32C);
  482. }
  483. break;
  484. #endif
  485. default:
  486. break;
  487. }
  488. }