Sparc: fix exceptions in delay slot

Fix a case where an exception happens with the
instruction in the delay slot.

Recovery of branch condition in the exception handling
code was not converted to TCG. Because the condition
was bogus, wrong NPC could be selected from the two
candidates.

A nice bug report with a test case can be found in:
https://bugs.launchpad.net/qemu/+bug/551814

Fix based on patch by Fabrice Bellard.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
1 file changed
tree: 9d413494748513e6cedb9a284ce20e4b92d64a3b
  1. audio/
  2. block/
  3. bsd-user/
  4. darwin-user/
  5. default-configs/
  6. docs/
  7. fpu/
  8. gdb-xml/
  9. hw/
  10. linux-user/
  11. net/
  12. pc-bios/
  13. QMP/
  14. roms/
  15. slirp/
  16. sysconfigs/
  17. target-alpha/
  18. target-arm/
  19. target-cris/
  20. target-i386/
  21. target-m68k/
  22. target-microblaze/
  23. target-mips/
  24. target-ppc/
  25. target-s390x/
  26. target-sh4/
  27. target-sparc/
  28. tcg/
  29. tests/
  30. .gitignore
  31. .gitmodules
  32. a.out.h
  33. acl.c
  34. acl.h
  35. aes.c
  36. aes.h
  37. aio.c
  38. alpha-dis.c
  39. alpha.ld
  40. arch_init.c
  41. arch_init.h
  42. arm-dis.c
  43. arm-semi.c
  44. arm.ld
  45. async.c
  46. balloon.c
  47. balloon.h
  48. block-migration.c
  49. block-migration.h
  50. block.c
  51. block.h
  52. block_int.h
  53. bswap.h
  54. bt-host.c
  55. bt-host.h
  56. bt-vhci.c
  57. buffered_file.c
  58. buffered_file.h
  59. cache-utils.c
  60. cache-utils.h
  61. Changelog
  62. check-qdict.c
  63. check-qfloat.c
  64. check-qint.c
  65. check-qjson.c
  66. check-qlist.c
  67. check-qstring.c
  68. cmd.c
  69. cmd.h
  70. cocoa.m
  71. CODING_STYLE
  72. config.h
  73. configure
  74. console.c
  75. console.h
  76. COPYING
  77. COPYING.LIB
  78. cpu-all.h
  79. cpu-common.h
  80. cpu-defs.h
  81. cpu-exec.c
  82. cpus.c
  83. cpus.h
  84. create_config
  85. cris-dis.c
  86. curses.c
  87. curses_keys.h
  88. cutils.c
  89. d3des.c
  90. d3des.h
  91. def-helper.h
  92. device_tree.c
  93. device_tree.h
  94. dis-asm.h
  95. disas.c
  96. disas.h
  97. dma-helpers.c
  98. dma.h
  99. dyngen-exec.h
  100. elf.h
  101. envlist.c
  102. envlist.h
  103. exec-all.h
  104. exec.c
  105. feature_to_c.sh
  106. gdbstub.c
  107. gdbstub.h
  108. gen-icount.h
  109. host-utils.c
  110. host-utils.h
  111. hpet.h
  112. hppa-dis.c
  113. hppa.ld
  114. hxtool
  115. i386-dis.c
  116. i386.ld
  117. ia64-dis.c
  118. ia64.ld
  119. input.c
  120. ioport-user.c
  121. ioport.c
  122. ioport.h
  123. json-lexer.c
  124. json-lexer.h
  125. json-parser.c
  126. json-parser.h
  127. json-streamer.c
  128. json-streamer.h
  129. keymaps.c
  130. keymaps.h
  131. kvm-all.c
  132. kvm.h
  133. libfdt_env.h
  134. LICENSE
  135. linux-aio.c
  136. m68k-dis.c
  137. m68k-semi.c
  138. m68k.ld
  139. MAINTAINERS
  140. Makefile
  141. Makefile.dis
  142. Makefile.hw
  143. Makefile.objs
  144. Makefile.target
  145. Makefile.user
  146. microblaze-dis.c
  147. migration-exec.c
  148. migration-fd.c
  149. migration-tcp.c
  150. migration-unix.c
  151. migration.c
  152. migration.h
  153. mips-dis.c
  154. mips.ld
  155. module.c
  156. module.h
  157. monitor.c
  158. monitor.h
  159. nbd.c
  160. nbd.h
  161. net-checksum.c
  162. net.c
  163. net.h
  164. notify.c
  165. notify.h
  166. osdep.c
  167. osdep.h
  168. path.c
  169. pci-ids.txt
  170. poison.h
  171. posix-aio-compat.c
  172. ppc-dis.c
  173. ppc.ld
  174. ppc64.ld
  175. qbool.c
  176. qbool.h
  177. qdict-test-data.txt
  178. qdict.c
  179. qdict.h
  180. qemu-aio.h
  181. qemu-barrier.h
  182. qemu-binfmt-conf.sh
  183. qemu-char.c
  184. qemu-char.h
  185. qemu-common.h
  186. qemu-config.c
  187. qemu-config.h
  188. qemu-doc.texi
  189. qemu-error.c
  190. qemu-error.h
  191. qemu-img-cmds.hx
  192. qemu-img.c
  193. qemu-img.texi
  194. qemu-io.c
  195. qemu-lock.h
  196. qemu-log.h
  197. qemu-malloc.c
  198. qemu-monitor.hx
  199. qemu-nbd.c
  200. qemu-nbd.texi
  201. qemu-objects.h
  202. qemu-option.c
  203. qemu-option.h
  204. qemu-options.hx
  205. qemu-queue.h
  206. qemu-sockets.c
  207. qemu-tech.texi
  208. qemu-thread.c
  209. qemu-thread.h
  210. qemu-timer.c
  211. qemu-timer.h
  212. qemu-tool.c
  213. qemu-x509.h
  214. qemu.sasl
  215. qemu_socket.h
  216. qerror.c
  217. qerror.h
  218. qfloat.c
  219. qfloat.h
  220. qint.c
  221. qint.h
  222. qjson.c
  223. qjson.h
  224. qlist.c
  225. qlist.h
  226. qobject.h
  227. qstring.c
  228. qstring.h
  229. readline.c
  230. readline.h
  231. README
  232. rules.mak
  233. rwhandler.c
  234. rwhandler.h
  235. s390-dis.c
  236. s390.ld
  237. savevm.c
  238. sdl.c
  239. sdl_keysym.h
  240. sdl_zoom.c
  241. sdl_zoom.h
  242. sdl_zoom_template.h
  243. sh4-dis.c
  244. softmmu-semi.h
  245. softmmu_defs.h
  246. softmmu_exec.h
  247. softmmu_header.h
  248. softmmu_template.h
  249. sparc-dis.c
  250. sparc.ld
  251. sparc64.ld
  252. sysemu.h
  253. targphys.h
  254. tcg-runtime.c
  255. texi2pod.pl
  256. thunk.c
  257. thunk.h
  258. TODO
  259. translate-all.c
  260. uboot_image.h
  261. usb-bsd.c
  262. usb-linux.c
  263. usb-stub.c
  264. VERSION
  265. vgafont.h
  266. vl.c
  267. vnc-auth-sasl.c
  268. vnc-auth-sasl.h
  269. vnc-auth-vencrypt.c
  270. vnc-auth-vencrypt.h
  271. vnc-tls.c
  272. vnc-tls.h
  273. vnc.c
  274. vnc.h
  275. vnc_keysym.h
  276. vnchextile.h
  277. x86_64.ld
  278. x_keymap.c
  279. x_keymap.h